排序演算法分為內部排序和外部排序,內部排序又分為交換排序、選擇排序、插入排序。今天寫一下交換排序的演算法。
交換排序的思想是比較兩個物件的關鍵字,如果這兩個物件的關鍵字發生逆序,則交換這兩個物件的位置。交換排序分為氣泡排序和快速排序。
對於氣泡排序:如果待排序的元素有n個,則要進行n-1輪比較,第i輪的比較次數為n-i-1次。對於氣泡排序演算法的改進則是增加乙個bool型別的變數,用於記錄第i輪是否發生過元素交換,如果沒有發生過元素交換,則排序演算法結束,元素已經有序,否則要進行下一輪。
氣泡排序**如下:
//氣泡排序
void
bubblesort
(int
*arr,
int len)}if
(!sig)
}}
對於快速排序(從大到小排序),其基本原理是:隨機選取乙個元素作為樞紐元素,將所有大於樞紐元素的元素放到樞紐元素的右邊,將所有小於或等於該樞紐元素的元素放到該樞紐元素的左邊;此時,樞紐元素的最終位置已經確定,而陣列被分為兩部分,其中一部分元素均比樞紐元素的值大,另一部分的元素均不大於樞紐元素,對被分為兩部分的元素重複上述過程,直到所有元素都在最終位置上。
**的設計是首先選取第乙個元素作為樞紐元素(其中0下標位置用於存放樞紐元素),之後分別將被分為兩部分的元素的第乙個元素作為樞紐元素重複上述過程。
快速排序演算法**如下:
//快速排序,a[0]用於存放樞紐元素
void
quiksort
(int
*arr,
int m,
int n)
int low = m;
int high = n;
arr[0]
= arr[low]
;while
(low < high)
arr[low]
= arr[high]
;while
(arr[low]
<= arr[0]
&& low < high)
arr[high]
= arr[low];}
arr[low]
= arr[0]
;//樞紐元素的最終位置
quiksort
(arr,m,low -1)
;quiksort
(arr,low +
1,n)
;}
今天寫完快速排序的演算法後,突然有了點自信。之前不敢投簡歷一直覺得自己沒有準備好,排序演算法還沒有看,查詢相關的知識點還沒有複習,圖的內容也忘的差不多了。。。好多理由,同時也是好多藉口。總覺得知識沒有在自己腦子裡,其實只是自己不願意認真思考的乙個藉口。今天自己沒有看書,沒有找ppt,憑藉著自己之前的記憶與理解寫出了快速排序的演算法,雖然**寫的不是特別好,但是至少證明快速排序演算法的理論和氣泡排序的理論自己還是知道,它們已經深深印在自己腦子裡,只是自己沒有去查詢它們而已。不要覺得自己學過的東西必須經過再次看書複習才能知道,其實只要自己稍微思考一下,喚起自己的記憶,很多東西自己是沒有忘記的!
沒有準備好只是自己給自己的懶惰和害怕找的藉口而已。多動腦,多思考,多動手,堅信自己是最棒的!要不然自己的一生都要為這個「沒有準備好」的藉口買單了。實踐出真知,行動才有可能,在那裡空想沒有一點幫助,反而會增加自己的焦慮感!
今天有點囉嗦了,只是自己感慨頗多~~~最後把所有的**一併附上吧~
#include
//氣泡排序
void
bubblesort
(int
*arr,
int len)}if
(!sig)}}
//快速排序,a[0]用於存放樞紐元素
void
quiksort
(int
*arr,
int m,
int n)
int low = m;
int high = n;
arr[0]
= arr[low]
;while
(low < high)
arr[low]
= arr[high]
;while
(arr[low]
<= arr[0]
&& low < high)
arr[high]
= arr[low];}
arr[low]
= arr[0]
;//樞紐元素的最終位置
quiksort
(arr,m,low -1)
;quiksort
(arr,low +
1,n);}
intmain()
;printf
("before bubble sort arr:");
for(i =
0;i <
5;i++
)printf
("\n");
bubblesort
(arr,5)
;printf
("after bubble sort arr:");
for(i =
0;i <
5;i++
)printf
("\n");
int arr2[9]
=;printf
("before quick sort arr2:");
for(i =
1;i <
9;i ++
)printf
("\n");
quiksort
(arr2,1,
8);printf
("after quick sort arr2:");
for(i =
1;i <
9;i ++
)printf
("\n");
return0;
}
插入,冒泡,選擇,快速排序(c語言,排序)
插入,冒泡,選擇,快速 排序 include typedef struct abc seqlist void insert sort seqlist r,int n 插入排序 void bubble sort seqlist r,int n 氣泡排序 void select sort seqlist...
關於C語言的氣泡排序和快速排序
氣泡排序一般來說進行的是n 1次排序 如果n個數需要排序 在每一次的排序中總會找到乙個數在左邊或者右邊,如果設定乙個flag 有的時候就可以大大減少排序的次數 如下 includeusing namespace std void bubblesort int a 6 int len if flag ...
排序 氣泡排序 快速排序
快速排序 氣泡排序就是自上向下依次對比兩個數字,若上面的數字大於下面的數字,則兩者交換,否則不交換。這樣每次迴圈結束,未排序的最大的數就到了最下面。如陣列前兩次迴圈過程如下 快速排序的核心是partition 函式,其功能如下所示 34的位置找到後,其將陣列分成兩部分,前一部分都比34小,後一部分都...