C語言 快速排序

2021-07-23 10:15:21 字數 1513 閱讀 9877

1.快排是對氣泡排序的一種改進,在快速排序中,元素的比較和移動是從兩端向中間進行的,關鍵碼較大的元素一次就能從前面移動到後面,關鍵碼較小的元素一次就能從後面移動到前面,元素移動距離的較遠,從而減少了總的比較次數和移動次數

2.快速排序是基於分治法設計的,其分治策略是:

①、劃分:選定乙個元素作為軸值,以軸值為基準將整個序列劃分為兩個子串行。軸值的位置在劃分的過程中確定,並且前乙個子串行的元素均小於或者等於軸值,後乙個子串行的元素大於或者等於軸值

②、求解子問題:分別對劃分後的每乙個子串行遞迴處理

③、合併:由於對子序列的排序是就地進行的,所以合併並不需要執行任何操作

1.選擇軸值,一般是選取第乙個元素的關鍵碼。有乙個快排的最壞情況就是如果待排序元素是正序或者逆序,就會將除軸值以外的元素分到軸值的一邊。

2.劃分

①、設定劃分區間:i=first,j=end

②、執行右側掃瞄,直到r[j]小於軸值,將r[j]與r[i]交換,i++

③、執行左側掃瞄,直到r[i]大於軸值,將r[i]與r[j]交換,j–

④、重複二到三直到i=j,確定看軸值的所在位置,返回該位置

初始鍵值序列      23  12  35  6  19  50  28

一次劃分後 [19 13 6] 23 [35 50 28]

分別進行快速排序 [6 13] 19

6 [13]

13[28] 35 [50]

28 35

50最終結果 6 13 19 23 28 35 50

3.對待排序序列進行了一次劃分後,在分別對左右兩個子串行進行快速排序,以此類推。

#include

#include

/*快速排序

*///列印的陣列

void print(int args, int end)

printf("\n");

}//快速排序一次劃分演算法

int partition(int args, int first, int end)

//進行左側掃瞄

while (i < j&&args[i] <= args[j]) i++;

if (i < j)

}return i;

}//快速排序演算法,遞迴呼叫

void quicksort(int args, int first, int end)

}int main(void);

int first = 0;

int end = 6;

//列印排序前的陣列

printf("原始陣列:");

print(args, end);

quicksort(args, first, end);

printf("排序完成後的陣列:");

print(args, end);

system("pause");

return

0;}

快速排序C語言

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

快速排序 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...

快速排序(C語言)

採用先確定數字然後找位置的方法。從需要處理的數字兩端選擇乙個作為基準數字。每次把基準數字和另一端的數字進行順序調整,直到和所有其他數字都進行過順序調整。每次調整過順序後就把非基準數字排除在外。查詢演算法可以從一組數字中找到某個數字所在的位置 快速排序 include void quick sort ...