快速排序—最常用的排序算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序—最常用的排序算法相关的知识,希望对你有一定的参考价值。

快速排序算法是冒泡排序的一种改进,快速排序也是通过逐渐消除待排序的无序序列中逆序元素来实现排序的

算法思想:

(1)  我们从待排序的记录序列中选取一个记录(通常第一个)作为基准元素(称为key)key=arr[left],然后设置两个变量,left指向数列的最左部,right指向数据的最右部。

技术分享图片

(2)  key首先与arr[right]进行比较,如果arr[right]<key,则arr[left]=arr[right]将这个比key小的数放到左边去,如果arr[right]>key则我们只需要将right--,right--之后,再拿arr[right]与key进行比较,直到arr[right]<key交换元素为止。

技术分享图片

 

(3)  如果右边存在arr[right]<key的情况,将arr[left]=arr[right],接下来,将转向left端,拿arr[left ]与key进行比较,如果arr[left]>key,则将arr[right]=arr[left],如果arr[left]<key,则只需要将left++,然后再进行arr[left]与key的比较。

技术分享图片

(4)  然后再移动right重复上述步骤

技术分享图片

(5)  最后得到 {23 58 13 10 57 62} 65 {106 78 95 85},再对左子数列与右子数列进行同样的操作。最终得到一个有序的数列。

{23 58 13 10 57 62} 65 {106 78   95 85}

{10 13} 23 {58 57 62} 65 {85 78 95} 106

10 13 23 57 58 62 65 78 85 95 106

算法实现:

public class QuickSort {

 

   public static void quickSort(int [] arr,int left,int right) {

      int pivot=0;

      if(left<right) {

         pivot=partition(arr,left,right);

         quickSort(arr,left,pivot-1);

         quickSort(arr,pivot+1,right);

      }

   }

 

   private static int partition(int[] arr,int left,int 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;

      return left;

   }

  

   public static void main(String[] args) {

      int arr[]= {65,58,95,10,57,62,13,106,78,23,85};

      System.out.println("排序前:"+Arrays.toString(arr));

      quickSort(arr,0,arr.length-1);

      System.out.println("排序后:"+Arrays.toString(arr));

   }

}

排序前:[65, 58, 95, 10, 57, 62, 13, 106, 78, 23, 85]

排序后:[10, 13, 23, 57, 58, 62, 65, 78, 85, 95, 106]


以上是关于快速排序—最常用的排序算法的主要内容,如果未能解决你的问题,请参考以下文章

快速排序算法C#实现

Scala实现冒泡排序,选择排序和快速排序

Java常用排序算法/程序员必须掌握的8大排序算法

图解程序员必须掌握的Java常用8大排序算法

排序算法-快速排序

大张老师帮你快速理解程序经典算法:快速排序算法