C 實現的快速排序演算法

2021-07-01 21:58:22 字數 2320 閱讀 6568

c++快速排序講解+演算法

首先說說快速排序,現在網上很多快速排序的解釋,我也談談我自己對快速排序的了解和看法。

快速排序是一種很高效的排序演算法,它的核心思想是:在要排序的陣列中,先選定乙個數(一般是第乙個數或者最後乙個數,就叫它x),以x為標準,進行一次排序,排序的結果是以x為中間值,比它大或小的值都在它的兩邊,然後再對兩邊部分繼續排序,直到排好。

舉例說明:

以陣列:s[12,2,4,56,64,8,12,32,79,9]為例進行公升序排序。

選定第乙個數12為初值,x=12;設定兩個陣列下標變數:組首i=0,組尾j=9;

從右往左找比x小或等於的數:即j=9,然後將9賦值給s[0],即s[0]=9;此時s[9]還是為9;

接下來從左往右開始找比x大的數:即從i=1處開始找,直到i=3時,將56賦值給剛剛的s[9],即s[9]=s[3];s[9]的值就為56;

再從j=8處從右往左找比x小或等於的數:找到s[6],執行s[3]=s[6],

再從i=3處從左往右開始找比x大的數:找到s[3],執行s[6]=s[3];

再從j=5處從右往左找比x小或等於的數:找到s[5],執行s[3]=s[5];

再從i=4處從左往右開始找比x大的數:找到s[4],執行s[5]=s[4];

這時x就處於整個陣列中間,把s[5]=x,第一趟排序就完成了。

畫個圖看看每趟排序後的結果:01

2345

6789

122456

6481232799

1924

5664812

327992

92456

6481232

795639

241264812

3279564

92412

6486432

795659

24128

8643279566

92412

8126432

7956

然後再對12前半部分和後半部分分別進行排序,就可以得到自己想要的結果了。下面附上**:

# include using namespace std;

void quicksortdown(int a, int, int);//函式宣告,按降序排序

void quicksortup(int a, int, int);//函式宣告,按公升序序排序

int main()

;//34, 65, 12, 43, 67, 5, 78, 10, 3, 70

int k;

int len = sizeof(array) / sizeof(int);

cout << "the orginal array are:" << endl;

for (k = 0; k < len; k++)

cout << array[k] << ",";

cout << endl;

quicksortdown(array, 0, len - 1);

cout << "the sorted array are" << endl;

for (k = 0; k < len; k++)

cout << array[k] << ",";

cout << endl;

quicksortup(array, 0, len - 1);

cout << "the sorted array are" << endl;

for (k = 0; k < len; k++)

cout << array[k] << ",";

cout << endl;

system("pause");

return 0;

}void quicksortdown(int s, int l, int r)//降序演算法

} s[i] = x;

quicksortdown(s, l, i - 1);

quicksortdown(s, i + 1, r); }}

void quicksortup(int s, int l, int r)//公升序演算法

while (i < j&&s[i] <= x)//從左向右找到第乙個大於等於x的數

i++;

if (i < j)

}s[i] = x;

quicksortup(s, l, i - 1); //遞迴呼叫本身

quicksortup(s, i + 1, r); //遞迴呼叫本身

}}

剛學習,粗陋見解,不對的地方歡迎指出。

我參考了這篇文章的**,感興趣的可以去看看

快速排序演算法的C 實現

但是當輸入有相同元素時,輸出就會有問題!該怎麼解決呢?或者更通用一點的 是什麼樣的呢?下次再編輯!隨機快速排序 include include include using namespace std void quicksort int arr,int num1,int num2 對陣列arr nu...

演算法 快速排序的c 實現

快速排序的思想 設定兩個左右哨兵,每次取最左邊的數作為基準數,然後先移動右哨兵,找出第乙個比基準數小的數 之後然後移動左哨兵,找到第乙個比基準數大的數,此時交換兩個哨兵指向的數,然後繼續移動重複上述過程,直到兩個哨兵重合,交換基準數與哨兵指向的數。再接著對基準數的左右兩邊分別重複上述過程 可用遞迴實...

快速排序演算法 c 實現

namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...