排序系列之——快速排序

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

基本思想是基于分治法:

1、在待排序列表L[1···n]中任取一个元素pivot作为基准,通过一趟排序将待排序列表划分为独立的两部分L[1···k-1],L[k+1···n],使得L[1···k-1],中的所有元素都小于等于privot,L[k+1···n]中所有元素大于等于privot。则privot放在了其最终位置L(k)上。这个过程称之为一趟快速排序。

2、而后,分别递归对两个子表重复上述过程,直至每部分内只有一个元素或空为止,即所有元素都放在了其最终位置上。

快速排序里最主要的的就是其分治法,

以下程序采用两种分治方法。

方法一较为简单,代码如下:

 1 //8 12 4 13 18
 2 int Partion(int *arr, int len)//(基本分割)
 3 {
 4     int left = 0;
 5     int right = len -1;
 6 
 7     int key = arr[0];//以第一个元素为枢轴值,对表进行划分--->对于随机数这是可行的。
 8     while( left < right)
 9     {
10         while( left < right && arr[right] >= key)  --right;  //走到 4
11         arr[left] = arr[right]; //将4赋值给arr[left]
12         
13         if( left >= right)
14             break;
15 
16         while( left < right && arr[left] <= key)   ++left;  //走到 12
17         arr[right] = arr[left];
18     }
19     arr[left] = key;//交换8 4之后8的位置为left
20     return left;
21 }
View Code

相关文章:

  • 2021-12-01
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
  • 2021-08-16
  • 2022-12-23
猜你喜欢
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
  • 2022-01-06
  • 2021-07-05
相关资源
相似解决方案