Javaの4つの配列のソート
3004 ワード
package algorithm.sort;
import java.util.Random;
/**
* @author szy
* 2012-7-24
*/
public class Sort {
/**
*
*
* : ,
* , ,
* ,
*
* @param arr
* @return
*/
public int[] choiceSort(int[] arr){
int t,i=0,j;
int len = arr.length;
for(;i<len;i++){
int m = i;
for(j=i+1;j<len;j++){
// j m , j m
if(arr[j] < arr[m]){
m=j;
}
}
// m i
if(i != m){
t = arr[i];
arr[i] = arr[m];
arr[m]=t;
}
}
return arr;
}
/**
*
*
* :
* ,
* ,
* ,
*
*
* @param arr
* @return
*/
public int[] bubblingSort(int[] arr){
int t,i=0,j=0;
int len = arr.length;
for(;i<len;i++){
//
for(;j<len-i-1;j++){
// , ,
if(arr[j]>arr[j+1]){
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
return arr;
}
/**
*
*
* :
*
* .
* , ,
*
* @param arr
* @return
*/
public int[] insertSort(int[] arr){
// ,
//
int i=1,j;
int len = arr.length;
for(;i<len;i++){
int tmp = arr[i];
j = i-1;
// i ,
while(tmp < arr[j]){
arr[j+1] = arr[j];
j--;
if(j == -1){
break;
}
}
//
arr[j+1] = tmp;
}
return arr;
}
/**
*
*
* : , 2
* 2 .
* , 2
*
* @param arr
* @param right arr.length-1
* @param left 0
* @return
*/
public int[] quickSort(int[] arr, int left, int right){
int t,len = arr.length;
if(left < right){
int s = arr[left];
int i = left;
int j = right + 1;
while(true){
// s
while(i+1 < len && arr[++i] < s );
// s
while(j-1 > -1 && arr[--j] > s);
// i>=j
if(i>=j)
break;
else{
// i j
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[j];
arr[j] = s;
//
quickSort(arr,left,j-1);
//
quickSort(arr,j+1,right);
}
return arr;
}
// Test
public static void main(String[] args) {
int i = 0, len = 100000;
int[] arr = new int[len];
Random rd = new Random();
for (; i < len; i++) {
arr[i] = rd.nextInt(len);
}
long millis = System.currentTimeMillis();
//new Sort().bubblingSort(arr); //26
//new Sort().choiceSort(arr); //287
new Sort().insertSort(arr); //172
//new Sort().quickSort(arr, 0, len - 1);//19
for (i = 0; i < len; i++) {
System.out.println(arr[i]);
}
System.out.println(" :" + (System.currentTimeMillis() - millis) / 100
+ " ");
}
}