常见的几个排序算法
快排
public static void quickSort(int[] data, int start, int end) {
if(start < end ) {
int base = data[start];
int low = start;
int high = end+1;
while(true) {
while(low < end && data[++low] <= base );
while(high > start && data[--high] >= base );
if(low < high) {
swap (data,low,high);
}else {
break;
}
}
swap(data,start,high);
quickSort(data,start,high-1);
quickSort(data,high+1,end);
}
}
private static void swap(int[] data,int i,int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
冒泡排序
public static void bubbleSort(int[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < args.length - 1; i++) {
int temp;
boolean flag = true;
for (int j = 0; j < args.length - 1; j++) {
if (args[j] > args[j + 1]) {
temp = args[j];
args[j] = args[j + 1];
args[j + 1] = temp;
flag = false;
}
}
if (flag)
break;
}
}
折半排序
public static void foldInHalfSort(int[] args) {
long start = System.currentTimeMillis();
int i, j, middle, high, low;
for (i = 1; i < args.length; i++) {
int temp = args[i];
high = i - 1;
low = 0;
while (low <= high) {
middle = (low + high) / 2;
if (temp == args[middle]) {
high = middle;
break;
} else if (temp < args[middle]) {
high = middle - 1;
} else if (temp > args[middle]) {
low = middle + 1;
}
}
for (j = i; j > high + 1; j--) {
args[j] = args[j - 1];
}
args[high + 1] = temp;
}
}
插入排序
public static void insertSort(int[] args) {
long start = System.currentTimeMillis();
int i, j;
int temp = 0;
for (i = 2; i < args.length; i++) {
temp = args[i];
for (j = i - 1; j >= 0 && args[j] > temp; j--) {
args[j + 1] = args[j];
}
args[j + 1] = temp;
}
}