快速排序

305 阅读1分钟

快速排序原文链接

快速排序是一种对冒泡排序改进交换排序。

思想

通过一趟排序将数组分成两个部分,一部分的元素都比另外一个部分要小。然后在用相同的方法对这两个部分排序。可以采用递归的方式使整个数组有序。

排序流程

动图

代码

public static void quickSort(int arr[],int left,int right){
       if(left>=right){
           return;
       }

       int start=left;
       int end=right;
       int key=arr[left];
       while(left<right){
           while(left<right && arr[right]>=key){
               right--;
           }
           arr[left]=arr[right];
           while(left<right && arr[left]<=key){
               left++;
           }
           arr[right]=arr[left];
       }
       arr[left]=key;
       quickSort(arr,start,left-1);
       quickSort(arr,left+1,end);

    }

复杂度

如果带排数据本身就是有序的,那么快排的复杂度是O(n) 快排只是在数据随机的情况下,平均情况下效率最高。至于选择哪个数据作为分区的依据,因为数据是随机的,那么中间还是开头其实都一样。 快排平均复杂度是O(logN),最坏情况是逆序,那么就是O(n^2)

稳定性

在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。

更多推荐

归并排序详解

冒泡排序详解

选择排序详解

插入排序详解