快速排序

简介
快速排序(Quicksort)是对冒泡排序算法的一种改进。原理是设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选
用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
时间复杂度
平均时间复杂度:O(nlog2n),最坏时间复杂度:O(n²)
代码

public static void quickSort(int[] arr,int left, int right) {
   int l = left;
   int r = right;
   int pivot = arr[(left + right) / 2];
   int temp;
   while (l < r) {
     while (arr[l] < pivot) {
       l += 1;
     }
     while (arr[r] > pivot) {
       r -= 1;
     }
     if (l >= r) {
       break;
     }
     temp = arr[l];
     arr[l] = arr[r];
     arr[r] = temp;
     //这样与中间那个数相等的数就不断往中间移动
     if (arr[l] == pivot) {
       r -= 1;
     }
     if (arr[r] == pivot) {
       l += 1;
     }
   }
    // 如果 l == r, 必须l++, r--, 否则会出现栈溢出
   if (l == r) {
     l += 1;
     r -= 1;
   }
   //向左递归
   if (left < r) {
     quickSort(arr,left,r);
   }
    //向右递归
   if (right > l) {
     quickSort(arr,l,right);
   }
  }

测试

    int[] arr = {1,8,6,5,2,3,7};
    quickSort(arr,0,arr.length - 1);
    System.out.println(Arrays.toString(arr));

posted @ 2021-08-09 23:03  翻蹄亮掌一皮鞋  阅读(73)  评论(0)    收藏  举报