1樓:幾夢絲兒
快速排序是對氣泡排序的一種改進。它的基本思想是:通過一躺排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一不部分的所有資料都要小,然後再按次方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
假設要排序的陣列是a[1]……a[n],首先任意選取乙個資料(通常選用第乙個資料)作為關鍵資料,然後將所有比它的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一躺快速排序。一躺快速排序的演算法是:
1)、設定兩個變數i、j,排序開始的時候i:=1,j:=n;
2)以第乙個陣列元素作為關鍵資料,賦值給x,即x:=a[1];
3)、從j開始向前搜尋,即由後開始向前搜尋(j:=j-1),找到第乙個小於x的值,兩者交換;
4)、從i開始向後搜尋,即由前開始向後搜尋(i:=i+1),找到第乙個大於x的值,兩者交換;
5)、重複第3、4步,直到i>j;
詳細過程舉例如下:
原序: [26 5 37 1 61 11 59 15 48 19]
一: [19 5 15 1 11] 26 [59 61 48 37]
二: [11 5 15 1] 19 26 [59 61 48 37]
三: [1 5] 11 [15] 19 26 [59 61 48 37]
四: 1 5 11 [15] 19 26 [59 61 48 37]
五: 1 5 11 15 19 26 [59 61 48 37]
六: 1 5 11 15 19 26 [37 48] 59 [61]
七: 1 5 11 15 19 26 37 48 59 [61]
八: 1 5 11 15 19 26 37 48 59 61
快速排序法是所有排序方法中速度最快、效率最高的方法。程式如下:
var a:array[0..10] of integer;
n:integer;
procedure qsort(l,r:longint);
var i,j,m:longint;
begin
m:=a[l];
i:=l;
j:=r;
repeat
while a[i]m do dec(j);
if i<=j then begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
inc(i);
dec(j);
end;
until i>j;
if l if i end; begin for n:=1 to 10 do read(a[n]); qsort(1,10); for n:=1 to 10 do write(a[n]:4); end. 2樓:匿名使用者 program hongweikai; varn,i:longint; a:array[1..400000] of longint; procedure kp(l,r:longint); vari,j,x,t:longint; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i]>x do i:=i+1; while a[j]j; if i kp(i,r); if l kp(l,j); end; begin for i:=1 to 10 do read(a[i]); kp(1,10); for i:=1 to 10 do write(a[i],' '); end. 3樓:匿名使用者 插入排序 var n,i,j:longint; a:array[0..10000]of longint; begin readln(n); for i:=1 to n do read(a[i]); for i:=2 to n do begina[0]:=a[i];j:=i-1; while (a[0]0) do begina[j+1]:=a[j]; j:=j-1; end; a[j+1]:=a[0]; end; for i:=1 to n do write(a[i]:4); end. 歸併排序(求逆序對) var a,x,y,z,b:array[1..100000]of longint; n,i:longint; ans:int64; procedure merge(l,mid,r:longint); var i,j,k:longint; begin for i:=l to mid do x[i]:=a[i]; for i:=mid+1 to r do y[i]:=a[i]; i:=l; j:=mid+1; k:=l-1; while k=y[j])or(j>r))and(i<=mid) then begin inc(k); z[k]:=x[i]; inc(i); endelse begin inc(k); z[k]:=y[j]; inc(j); ans:=ans+mid-i+1; end; end; for i:=l to r do a[i]:=z[i]; end; procedure sort(l,r:longint); var mid:longint; begin mid:=(l+r)shr 1; if lx do inc(i); while b[j]j; if il then qsort(l,j); end; begin readln(n); for i:=1 to n do read(b[i]); for i:=1 to n do read(a[i]); qsort(1,n); sort(1,n); writeln(ans); end. 快速排序 var a:array[1..10000]of longint; n,i:longint; procedure asd(l,r:longint); var t,m,i,j:longint; begin i:=l;j:=r; m:=a[(l+r)div 2]; repeat while ma[j] do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if j>l then asd(l,j); if ia[j+1] then begint:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; for i:=1 to n do write(a[i]:4); end. 五 快速排序 由小到大 思想 中級本p230舉例排序過程 設i為當前表頭指標,j為當前表的尾指標,x為當前表的第乙個元素,首先從當表前的最後j位置向前找到乙個比x小的元素,此時將找到的小數放到當前表第一元素位置,i指標下移並向後找乙個元素比x大的元素,此時將找到的大數放到當前表的j位置,不斷按此方法... include define n 15 int main i,j,t 陣列已有n個資料for i 0 ia j 1 若相信的元素大小順序不對,就交換 for i 0 i printf n return 0 main printf the sorted numbers n for i 0 i 10 i... include typedef int infotype define n 10 假設的檔案長度,即待排序的記錄數目 typedef int keytype 假設的關鍵字型別 typedef struct rectype typedef rectype seqlist n 1 seqlist為順序表... 寫幾個無序的數字,按照程式一步一步來,你就知道了,而且印象深刻,絕對忘不了!那個大小比較是說,如果前乙個數比後乙個小,則交換位置 假設有n個數 n就是上邊程式中的arr.length 第一次氣泡排序 這時候i 0 最大的數就排在了最後。所以第二次 這時候i 1 排序的時候就從第乙個開始比較到倒數第二... 氣泡排序 英語 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序對...pascal快速排序
用氣泡排序法對陣列排序,用氣泡排序法對乙個陣列排序
誰有快速排序的c語言實現啊,誰有快速排序的C語言實現啊
氣泡排序法沒看懂
什麼是氣泡排序法,什麼是氣泡排序演算法