简介:
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出
复杂度:

原理:
1.从规定数组中选最左边为队长(基准点)
2.分队,将大于队长的放右边,将小于队长的放左边
3.左右两队重复第2步,直到一人一队
代码:
public static void main(String[] args) {
int[] array = new int[100];
Random rand = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = rand.nextInt(200);
}
System.out.println("原数组:" + Arrays.toString(array));
long start = System.currentTimeMillis();
quickSort(array, 0, array.length - 1);
long stop = System.currentTimeMillis();
System.out.println("排序后的数组:" + Arrays.toString(array));
System.out.println("所用时间:" + (stop - start) + "毫秒");
}
/**
*
* @param arr 所有队员
* @param left 该小队人员开始位置(包含)
* @param right 该小队人员结束位置(包含)
*/
public static void quickSort(int[] arr, int left, int right) {
if (left >= right)//一人一队,递归结束
return;
int p = arr[left];//定该小队最左的元素为小队长
int i = left, j = right;//i左边开始检查的位置,j右边开始检查的位置
while (i != j) {//为小队长检查出它的位置,当i=j停止完毕(帮小队长找最终位置)
while (arr[j] >= p && j > i) j--;//从该小队最右边向左边找小于小队长的队员下标(小于小队长的怎么可以站小队长后面)
while (arr[i] <= p && j > i) i++;//从该小队最左边向右边找大于小队长的队员下标(大于小队长的怎么可以站小队长前面)
//将该两名队员换位
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
//继续检查
}
//将小队长放到最终的位置
arr[left] = arr[i];
arr[j] = p;
quickSort(arr, left, i - 1);//将left到小队长前面一位为一对(left为队长)
quickSort(arr, i + 1, right);//将小队长后面一位到right位置为一队(小队长后面一位为队长)
}
800

被折叠的 条评论
为什么被折叠?



