国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

c語言快速排序算法示例代碼分享

2020-01-26 15:35:46
字體:
來源:轉載
供稿:網友


步驟為:
1.從數列中挑出一個元素,稱為 "基準"(pivot);
2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
3.遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

復制代碼 代碼如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define RANDOM(i) (rand()%i)
#define N 9    //設置數組長度

//分區操作
int Partition(int array[], int left, int right)
{
 int i,j;
 int temp;
 j = left-1;
 for (i=left; i<=right; i++)
 {
  if (array[i] <=  array[right]) //以最后一個數組的值為基準
  {
   j++;
   temp = array[j];
   array[j] = array[i];
   array[i] = temp;
  }
 }
 return j;
}

//迭代運算
void QuikSort(int array[], int left, int right)
{
 int pivot;
 if (left < right)
 {
  pivot = Partition(array, left, right);
  QuikSort(array, left, pivot-1);
  QuikSort(array, pivot+1, right);
 }
}

//示例
int main()
{
 int i = 0;
 int a[N];
 srand((int)time(0));  //設置隨機數種子

 for (i=0; i<N; i++)  //排序前
 {
  a[i] = RANDOM(100);
  printf("%d/t", a[i]);
 }
 printf("/n/n");

 QuikSort(a, 0, N-1);

 for (i=0; i<N; i++) //排序后
 {
  printf("%d/t", a[i]);
 }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 金乡县| 锡林浩特市| 大名县| 那曲县| 阿巴嘎旗| 永兴县| 合山市| 获嘉县| 石泉县| 青浦区| 宝鸡市| 山东省| 琼中| 瓦房店市| 霍林郭勒市| 忻城县| 公安县| 石景山区| 正蓝旗| 云和县| 清水河县| 湛江市| 晋州市| 孟津县| 鄂托克旗| 淅川县| 买车| 辰溪县| 新丰县| 洪雅县| 遂昌县| 休宁县| 安陆市| 韶山市| 哈巴河县| 广河县| 梓潼县| 隆尧县| 南安市| 资中县| 栖霞市|