快速排序 C語言

2021-08-17 09:55:38 字數 1076 閱讀 3741

設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。

設定兩個變數i、j,排序開始的時候:i=0,j=n-1

以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0]

從j開始向前搜尋,即由後開始向前搜尋(j–),找到第乙個小於key的值a[j],將a[j]和a[i]互換

從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換

重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)

#include

//c99以前沒有布林型,c99解決了布林型問題,標頭檔案

#define true 1

//5 9 8 3 4 6 7 2 1 可方便手動推算過程

//公升序

void quicksort(int *a,int left,int right)

int i = left;

int j = right;

int key = a[left];

while(i < j)

a[i] = a[j];

while(i < j&&key >=a[i])

a[j] = a[i];

}a[i] = key;

quicksort(a,left,i-1);

quicksort(a,i+1,right);

}int main(void)

; quicksort(a,0,10);

for(int i=0;i<11;i++)

printf("\n");

return

0;}

快速排序C語言

就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧.說說快速排序吧.這東西,原理就是不斷地將乙個陣列分成3部分.保持所有陣列處在這種狀態,最終完成排序.這些思想,還沒有掌握.加油吧,我還能說什麼?說些這個,呵呵.這段 起初不懂.後來,隨著不斷手工模擬,發現,採用了很多技巧.也難...

C語言 快速排序

1.快排是對氣泡排序的一種改進,在快速排序中,元素的比較和移動是從兩端向中間進行的,關鍵碼較大的元素一次就能從前面移動到後面,關鍵碼較小的元素一次就能從後面移動到前面,元素移動距離的較遠,從而減少了總的比較次數和移動次數 2.快速排序是基於分治法設計的,其分治策略是 劃分 選定乙個元素作為軸值,以軸...

快速排序 C語言

快速排序 基本思想是 1.分解 分為比基準元素小的 基準元素 比基準元素大的 三部分 2.遞迴求解 3.合併 include include define n 1000 define max 100 int a n void swap int i,int j int patition int p,i...