桶排序,氣泡排序和快速選擇排序的實現
排序是常需要我們去解決的問題,在學習演算法的過程中也接觸到了幾種常見的排序演算法。不論使用什麼樣的語言去實現排序演算法但是其原理都是一樣的。那麼在接下來的就介紹上面所說的三種排序演算法。
1.桶排序,可以將其描述為乙個二維陣列的儲存資料的過程。在這裡我們給出一組資料來進行說明,在這裡我們需要對5 3 5 2 8這五個數進行排序,那麼使用桶排序我們來比較10以內的數字進行排序。也就是我們在這裡要設定11個桶a[0]對應0.......a[10]對應10。那為什麼要這樣設定呢,這是因為每乙個桶都對應與其桶號相對應的數值。我們將需要排序的數放在桶裡面,然後只要從小到大或者是從大到小依次輸出桶號即可,如果這個桶裡面有資料我們就輸出,沒有結果就不輸出。最後得到的就是我們排序所要的最終結果。下面使用c語言實現桶排序的演算法,**如下:
在上面實現的演算法中我們所實現的是從小到大的排序過程,那麼要實現從大到小的排序需要我們做的就是將改變輸出桶中資料的for(i = 0; i <= 10; i++)將其改為for(i = 10; i >= 0; i--)即可實現從大到小的輸出。
2.氣泡排序,對於氣泡排序需要我們了解的就是氣泡排序的比較過程,其基本的意思就是比較相鄰兩個元素的大小,如果不符合排序的規則就交換位置,直到一組資料比完,就完成一組資料的比較。例如10 35 99 18 76然後進行比較首先完成第一組資料的比較10和35比較,按照規則從大到小,第一組第一次比較後就變成了351099 18 76,第一組第二次比較後35 991018 76,第一組第三次比較後35 99 181076,第一組第四次比較後35 99 18 7610,最後最小的數就放在了最後的位置,這也就完成了第一次比較。比較的趟數就是總的需要比較的個數減去1。就這樣完成剩餘的組數比較就可以實現資料的比較,這個組數也就是需要比較的趟數。同樣的不論使用那種語言去完成這個排序的演算法,其比較的核心是並沒有改變的。在下面的**中是使用c語言來實現一組資料的比較過程。
在上面的演算法中實現的是從大到小的演算法排序,那麼要實現從小到大的排序需要我們更改的就是將if(a[j] < a[j+1])改為大於即可。
3.快速選擇排序,在快排當中其核心就是先找到乙個基準數,一般一最左邊的數為基準數。然後從右向左找到小於基準數的數最後在這個位置停下來,從左往右找到大於基準數的數,最後在其對應的位置停下面,最後交換兩者的位置。當從右往左的哨兵和從左往右的哨兵相遇時,再將相遇的位置與基準數交換位置,最後一次比較完成之後要使得左邊的數都小於這個基準數,右邊的數要大於這個基準數,最後在基準數的右邊與左邊同時又進行這樣的比較過程。即可完成一組資料的比較。那麼在這裡舉一組資料來說明 6 8 5 3 9 7 5 2 1 7,首先最左邊的6為基準數,從最左邊的6設定乙個左邊的哨兵位,最右邊的7開始設定哨兵位,然後開始查詢第乙個8>6的因此在這裡停下,最右邊的1<6因此在這裡停下,兩者交換位置就變為615 3 9 7 5 287最後這樣依次進行到最後變為1 5 3 2 5 6 7 9 8 7這樣就完成了一組資料的比較最後使用遞迴來迴圈操作這個過程即可實現整個排序。同樣的在學習資料結果與演算法我們需要掌握的是其核心是什麼,用什麼語言都不是問題。下面的**是使用c語言寫的,具體實現的**如下:
桶排序 氣泡排序 選擇排序 快速排序回顧
第一次了解桶排序的時候,是在c語言課本的乙個題目。題目大概意思是要將三萬個學生的成績進行排名,分數從0分到100分。桶排序的時間複雜度時o m n 所以就可以申請乙個大小為100的為int型別的陣列,然後將陣列初始化為0,再將陣列的下標看作為分數,把陣列元素中儲存的數值對應著獲得該分數的人數,這樣分...
桶排序 氣泡排序 快速排序
3 實現 3.1最簡單粗暴滴方法 include includeusing namespace std int main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 依次列印排序好的數列 cout 說明 1 只能輸入事先預定設定的陣列個數 2 陣列中每個數...
氣泡排序,選擇排序,快速排序
1.氣泡排序 氣泡排序 bubble sort 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間o n 2 void bubblesort int arr in...