本文目錄一覽:
c語言怎樣實現快速排序
includestdio.h
int arr_num[];
int length;
void quick_sort(int left, int right)
{
int i, j, c, temp;
if(leftright)
return;
i= left;
j= right;
temp = arr_num[i]
while(i != j)
{
while(arr_num[j]=temp ij)
{
j–;
}
while(arr_num[i]=temp ij)
{
i++;
}
if(ij)
{
c = arr_num[i];
arr_num[i] = arr_num[j];
arr_num[j] = c;
}
}
//left為起始值(參照值)此時的I為第一次排序結束的最後值,與參照值交換位置
arr_num[left] = arr_num[i];
arr_num[i] = temp;
//繼續遞歸直到排序完成
quick_sort(left, i-1);
quick_sort(i+1, right);
}
int main()
{
int i;
length = 7;
arr_num[length] = {23, 7, 17, 36, 3, 61, 49}
//快速排序調用
quick_sort(0, length-1);
//輸出排序後的結果
for(i=1;i=length;i++)
printf(“%d “,arr_num[i]);
getchar();getchar();
return 0;
}
C語言中快速排序法的原理及應用
“快速排序法”使用的是遞歸原理,下面我結合一個例子來說明“快速排序法”的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數–53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18,53,80,72,63,98},這樣一個數組的排序就變成了兩個小數組的排序–53左邊的數組和53右邊的數組,而這兩個數組繼續用同樣的方式繼續下去,一直到順序完全正確。
一般來說,冒泡法是程序員最先接觸的排序方法,它的優點是原理簡單,編程實現容易,但它的缺點就是–程序的大忌–速度太慢。
附上快速排序代碼:
#includestdio.h
void quicksort(int a[],int left,int right)
{
int i,j,temp;
i=left;
j=right;
temp=a[left];
if(leftright)
return;
while(i!=j)
{
while(a[j]=tempji)
j–;
if(ji)
a[i++]=a[j];
while(a[i]=tempji)
i++;
if(ji)
a[j–]=a[i];
}
a[i]=temp;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
void main()
{
int a[]={53,12,98,63,18,72,80,46,32,21};
int i;
quicksort(a,0,9);
/*排好序的結果*/
for(i=0;i10;i++)
printf(“%4d\n”,a[i]);
}
C語言的快速排序的算法是什麼啊?
快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。 算法過程設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用第一個數據)作為關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序算法,也就是說,多個相同的值的相對位置也許會在算法結束時產生變動。 一趟快速排序的算法是: 1)設置兩個變量I、J,排序開始的時候:I=0,J=N-1; 2)以第一個數組元素作為關鍵數據,賦值給key,即 key=A[0]; 3)從J開始向前搜索,即由後開始向前搜索(J=J-1),找到第一個小於key的值A[J],並與key交換; 4)從I開始向後搜索,即由前開始向後搜索(I=I+1),找到第一個大於key的A[I],與key交換; 5)重複第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另循環結束。) 例如:待排序的數組A的值分別是:(初始關鍵數據:X=49) 注意關鍵X永遠不變,永遠是和X進行比較,無論在什麼位子,最後的目的就是把X放在中間,小的放前面大的放後面。 A[0] A[1] A[2] A[3] A[4] A[5] A[6]: 49 38 65 97 76 13 27 進行第一次交換後:27 38 65 97 76 13 49 ( 按照算法的第三步從後面開始找) 進行第二次交換後:27 38 49 97 76 13 65 ( 按照算法的第四步從前面開始找X的值,6549,兩者交換,此時:I=3 ) 進行第三次交換後:27 38 13 97 76 49 65 ( 按照算法的第五步將又一次執行算法的第三步從後開始找 進行第四次交換後:27 38 13 49 76 97 65 ( 按照算法的第四步從前面開始找大於X的值,9749,兩者交換,此時:I=4,J=6 ) 此時再執行第三步的時候就發現I=J,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所有大於49的數全部在49的後面,所有小於49的數全部在49的前面。 快速排序就是遞歸調用此過程——在以49為中點分割這個數據序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部數據序列的快速排序,最後把此數據序列變成一個有序的序列,根據這種思想對於上述數組A的快速排序的全過程如圖6所示: 初始狀態 {49 38 65 97 76 13 27} 進行一次快速排序之後劃分為 {27 38 13} 49 {76 97 65} 分別對前後兩部分進行快速排序 {27 38 13} 經第三步和第四步交換後變成 {13 27 38} 完成排序。 {76 97 65} 經第三步和第四步交換後變成 {65 76 97} 完成排序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/288529.html