Rumah  >  Artikel  >  pembangunan bahagian belakang  >  C语言中快速排序法怎么排

C语言中快速排序法怎么排

coldplay.xixi
coldplay.xixiasal
2020-08-08 10:13:023495semak imbas

快速排序法的排法:首先每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边;然后将大于等于基准点的数全部放到基准点的右边;最后在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。

C语言中快速排序法怎么排

快速排序法的排法:

算法思想:

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

f7510709d09a31222262ef056b5bbd9.png

(2)  key首先与arr[right]进行比较,如果arr[right]d8ff42321a618e475a0265747671e83bkey则我们只需要将right--,right--之后,再拿arr[right]与key进行比较,直到arr[right]e5f2136ef79c19ed97f312b4958b4c02key,则将arr[right]=arr[left],如果arr[left]

e26fcf782b6e1830783163890899e12.png

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

9b313aeedbdcb84989f7aace1362103.png

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

9ae7730d414bfcd7d4a70e6aa26eeaf.png

算法实现:

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视频教程

Atas ialah kandungan terperinci C语言中快速排序法怎么排. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn