C語言兩種方法編寫快排

2021-10-13 19:05:22 字數 1428 閱讀 5965

快排

啦啦,今天來寫寫快排,今天天氣晴朗,又是快樂的一天。

首先我要寫的兩種方法只有一點點不同。

舉例說明一下吧:以3 5 7 2 1為例(從小到大排序)

第一種(fun1):

進行如下操作:以3為基準值,先從右邊開始找,1<3,右邊停止尋找,再從左邊開始,3等於3,i++,繼續找,5>3,停止。這時就可以換一次順序了,5和1換。就這樣以此類推,最後i等於j了,且都停止2上,這時,再給3和2換一下序,即可。

這裡解釋一下為什麼要從右邊開始,按我們之前的例子來說,如果從左邊開始最後i和j就會停止7上,導致排序錯誤,3的左邊會員比3大的7

第二種(fun2):

也是從右邊開始找,從右邊找到乙個小於基準值的就換,這時右邊不動了,再從左邊找,找到乙個大於基準值的就不動了,再與a[j]換,不管如何,都是a[i]與a[j]換。

講了大概過程,**應該能幫助理解

如下:

#include

void

fun1

(int left,

int right,

int a)

//第一種快排

while

(a[i]

<=k&&i//右邊開始

if(i} temp=a[left]

; a[left]

=a[i]

; a[i]

=temp;

//這是當i==j時進行的操作

fun1

(left,i-

1,a)

;fun1

(i+1

,right,a)

;//遞迴進行求解

}void

fun2

(int left,

int right,

int a)

//第二種快排

temp=a[i]

; a[i]

=a[j]

; a[j]

=temp;

while

(a[i]

<=k&&itemp=a[i]

; a[i]

=a[j]

; a[j]

=temp;

}fun2

(left,i-

1,a)

;fun2

(i+1

,right,a);}

intmain()

fun1(0

,n-1

,a);

//傳給自定義函式1,進行快排

//fun2(0,n-1,a);//傳給自定義函式2,進行快排

for(i=

0; i)}

快排確實比其他排序長一些,但是它的時間短一些,如果有些題目卡時間,那就只能辛苦自己碼一下啦

C語言判斷素數(兩種方法)

素數又稱質數,是指除了1和它本身外,不能被其他任何整數整除的數,例如17就是素數,因為它不能被2 16任意整數整除。思路1 判斷乙個數是否為素數,只需把m被2 m 1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。思路2 另外判斷方法可以簡化,m只需被2 m之間的每乙個整數去除就可以了,...

快排的兩種寫法

快速排序,原理很簡單就是在資料找乙個定點數,把小於這個數的數放到其左邊,大於這個定點數的數放到其右邊,再把左邊的數,右邊的數再按這種方式來排序,直至無數可排.先實現,不求空間消耗,把小於定點的數放乙個陣列 b,把大於定點的數的放乙個陣列 c,再把它們拷回陣列 a int quick sort int...

C語言快排

作為時間複雜度與空間複雜度均為o nlogn 的排序演算法 快速排序,本文主要介紹它的簡單函式呼叫及其詳細的 實現 include includeint main 陣列型別不同,比較函式會有些微的差異 首先在函式的形參處,使用const void 表示無型別指標,也就是說可以接受任意型別的指標 其次...