快排
啦啦,今天來寫寫快排,今天天氣晴朗,又是快樂的一天。
首先我要寫的兩種方法只有一點點不同。
舉例說明一下吧:以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 表示無型別指標,也就是說可以接受任意型別的指標 其次...