前段时间参加某公司的技术面试,让我实现快速排序算法,本来以为非常简单的一个算法,没想到当时硬是没写出来。所以回来实现下。
快速排序算法,主要在于分而治之的思想.
1. 设置标志 Flag = array[left]
2. 设置偏移量 i = left , j = right
3. 从j位置向前搜索,如果发现小于Flag的值,则交换(Flag 与 array[j])
注: 在执行该步时: array[i] = Flag;
4. 从i位置向后搜索,如果发现大于Flag的值,则交换(Flag 与 array[i])
注: 在执行该步时: array[j] = Flag;
重复3,4步骤直到i=j
采用递归调用的方式完成。
public static void quickSort(int array[], int left, int right) {
int Flag = array[left];
int i = left;
int j = right;
if (left < right) {
do {
while (j > left) {
if (array[j] <= Flag) {
swap(array, i, j);
break;
}
--j;
}
while (i < right) {
if (array[i] >= Flag) {
swap(array, i, j);
break;
}
++i;
}
} while (i < j);
}
System.out.println("\n i & j :"+ i +" "+j);
for (int index = 0; index < array.length; index++) {
System.out.print(" " + array[index]);
}
if (j < right){
quickSort(array,j+1,right);
}
if(j > left){
quickSort(array, left, j - 1);
}
}