1. 程式人生 > 實用技巧 >裸辭1天 vs 裸辭10天 vs 裸辭一個月

裸辭1天 vs 裸辭10天 vs 裸辭一個月


快速排序

排序在各種場合經常被用到。
快速排序是十分常用的高效率的演算法。

其思想是:先選一個“標尺”,
用它把整個佇列過一遍篩子,
以保證:其左邊的元素都不大於它,其右邊的元素都不小於它。

這樣,排序問題就被分割為兩個子區間。
再分別對子區間排序就可以了。

下面的程式碼是一種實現,請分析並填寫劃線部分缺少的程式碼。


#include <stdio.h>

void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}

int partition(int a[], int p, int r)
{
int i = p;
int j = r + 1;
int x = a[p];
while(1){
while(i<r && a[++i]<x);
while(a[--j]>x);
if(i>=j) break;
swap(a,i,j);
}
______________________;
return j;
}

void quicksort(int a[], int p, int r)
{
if(p<r){
int q = partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}

int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;

quicksort(a, 0, N-1);

for(i=0; i<N; i++) printf("%d ", a[i]);
printf("\n");

return 0;
}


注意:只填寫缺少的內容,不要書寫任何題面已有程式碼或說明性文字。

 1 #include <stdio.h>
 2 
 3 void swap(int a[], int i, int j)
 4 {
 5     int t = a[i];
 6     a[i] = a[j];
 7     a[j] = t;
 8 }
 9 
10 int partition(int a[], int p, int r)
11 {
12     int i = p;
13     int j = r + 1;
14     int x = a[p];
15     while(1){
16
while(i<r && a[++i]<x); 17 while(a[--j]>x); 18 if(i>=j) break; 19 swap(a,i,j); 20 } 21 swap(a,p,j); 22 return j; 23 } 24 25 void quicksort(int a[], int p, int r) 26 { 27 if(p<r) 28 { 29 int q = partition(a,p,r); 30 quicksort(a,p,q-1); 31 quicksort(a,q+1,r); 32 } 33 } 34 35 int main() 36 { 37 int i; 38 int a[] = {5,13,6,24,2,8,19,27,6,12,1,17}; 39 int N = 12; 40 41 quicksort(a, 0, N-1); 42 43 for(i=0; i<N; i++) printf("%d ", a[i]); 44 printf("\n"); 45 46 return 0; 47 }