程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習_排序_快速排序

C語言學習_排序_快速排序

編輯:關於C語言

快速排序:

該方法的基本思想是:
1.先從數列中取出一個數作為基准數。
2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重復第二步,直到各區間只有一個數。

快速排序進一步挖掘就是挖坑和分治,這種方法比較實用簡單:

對挖坑填數進行總結
1.i =L; j = R; 將基准數挖出形成第一個坑a[i]。
2.j--由後向前找比它小的數,找到後挖出此數填前一個坑a[i]中。
3.i++由前向後找比它大的數,找到後也挖出此數填到前一個坑a[j]中。
4.再重復執行2,3二步,直到i==j,將基准數填入a[i]中。

很容易能得出代碼:

#include
#include


void quick_sort(int s[], int l, int r);
int main(void)
{
int a[10] = {20, 8,10,27,9,22,24,7,15,55};
int i;


quick_sort(a, 0, 9);
for(i = 0; i < 10; i++)
printf("%d ", a[i]);


return 0;
}
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //將中間的這個數和第一個數交換
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 從右向左找第一個小於x的數
j--;
if(i < j)
s[i++] = s[j];

while(i < j && s[i] < x) // 從左向右找第一個大於等於x的數
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 遞歸調用
quick_sort(s, i + 1, r);
}
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved