快速排序算法简述
快速排序算法简述:
一、时间复杂度:
1、最优时间复杂度O(n*logn)
2、最差时间复杂度O(n2),倒序时,每个元素都需要交换
二、排序原理简述
首先任意取一个标准值,随机取或者取第一个元素如(1,2,4,8,3)取第一个元素作为标准值 1,以1作为标准,将大于等于1的放在待排序列右边,将小于1的放在待排数列左边,然后待排数列就分割成了两个部分,然后对分割出来的两部分待排数组分别做相同的递归操作。
三、算法流程(以取第一个元素作为基准)
1、取第一个元素作为基准值,确认数列左右边界,从两边开始向扫描
int left = subLeftIndex;
int right = subRightIndex;
int pivot = unsortedList[subLeftIndex];
2、从右边开始往左不断扫描,直到right跟left相等或者找到一个小于标准值的元素,如果元素都大于等于标准值,那么right指针不停往左边移动
3、当跳出2的循环后判断是否满足条件,如果满足条件则交换左右连个指针的值,因为左边的值已经做了交换所以left需要+1,避免被覆盖
4、因为右边的值已经做了交换,所以从左边开始往右扫描比标准值小的元素,如果left指针对应的值均小于标准值则增加left指针的值
5、当跳出4的循环后,判断是否满足条件,如果满足条件,将left指针指向的值赋值给right指针对应的值,由于上一次right已经做过交换,所以不用担心右边的值丢失的问题
6、完成一次循环后,left跟right的值将会相等,此时待排数组已经切分成了两部分,按照索引拆分,其实还是在同一个数组
7、完整代码如下:
public class QuickSort {
public static void quickSort(int [] unsortedList, int subLeftIndex, int subRightIndex){
if(subLeftIndex < subRightIndex){
int left = subLeftIndex;
int right = subRightIndex;
//基准
int pivot = unsortedList[subLeftIndex];
while(left < right){
while(left < right && unsortedList[right] >= pivot){
right--;
}
if(left < right){
unsortedList[left] = unsortedList[right];
left ++ ;
}
while (left < right && unsortedList[left] < pivot){
left++;
}
if(left < right){
unsortedList[right] = unsortedList[left];
right--;
}
}
//退出循环时 left = right
unsortedList[left] = pivot;
quickSort(unsortedList,subLeftIndex,left-1);
quickSort(unsortedList,left+1, subRightIndex);
}
}
public static void main(String[] args){
int size = 900000000;
int[] unsortedList = generateArray(size);
long start = System.currentTimeMillis();
quickSort(unsortedList,0,size -1);
long cost = System.currentTimeMillis() - start;
//printArray(unsortedList);
System.out.println();
System.out.println(" cost "+ cost + " ms");
}
public static int[] generateArray(int size){
int[] array = new int[size];
for (int i=0;i<size;i++) {
Random r = new Random();
int i1 = r.nextInt(size);
array[i] = i1;
}
return array;
}
public static void printArray(int[] array){
for (int i:array
) {
System.out.print(" "+i+" ,");
}
}
}
本文地址:https://blog.csdn.net/zsf5201314z/article/details/109642264
上一篇: 摄影白痴也能拍出小清新旅游照的技巧