博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  • 快速排序的原理
    快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。
  • 实例
     /**
     * 奇数在前,偶数在后
     * 1,3,5,7,2,4,6,8
     * 快速排序,两端开始
     */
public void tesKspx(){
        int[] arr = {1,2,3,10,3,4,5,6,7,8};
        int left = 0;
        int len = arr.length -1;
        int right = len ;
        while (left < right){
            System.out.println("left:"+left+"----right:"+right);
            while (left < right && arr[right] % 2 == 0){
                right -- ;
            }
            //right=6 时,跳出,所以出现奇数,放在左侧
            arr[left] = arr[right];
            while (left < right && arr[left] % 2 != 0){
                left ++;
            }
            //left=1时为2  跳出,放在右侧
            arr[right] = arr[left];
        }
        //第一轮后,最左侧是奇数,最右侧肯定也是偶数,在遍历 (1,6)之间的数据
        System.out.println(Arrays.toString(arr));
    }