簡單介紹三種常見的排序方法-選擇、冒泡、快排。
從大到小排列:
選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。
**如下:
4 void bts_sort(int data, int data_number)
5 16 }
17 temp = data[i];
18 data[i] = max;
19 data[index] = temp;
20 }
21
22 for(int i = 0;i < data_number;i ++)
23 printf("%d, ",data[i]);
24 printf("\n");
25 26 return ;
27 }
從大到小排序
氣泡排序是從第乙個資料開始依次和其它資料比較,遇到比它大的資料就替換,直到最後乙個資料,這樣第乙個資料就是最大的,其它的資料也一樣,依次和後面的資料比較,直到最後乙個排序結束。
**如下:
14
for(
int i =
0;i <
5;i ++)15
24}25printf
("%d, "
,sort_data[i]);
26}27printf
("\n"
);
從大到小排序:
快排比較相對於選擇和冒泡比較麻煩,但是時間上會少很多(特殊情況外)。
快排是先以第乙個資料賦值給基準,從資料的最後乙個開始比較,找到索引tail比基準大的資料後,把資料和第乙個資料交換,然後從頭開始繼續和基準比較,直到找到索引head比基準小的資料,然後賦值給剛才尾部的索引tail,再繼續從尾部tail開始往前遍歷,直到head >= tail時,結束此次遍歷。結果就是最後head = tail,把基準資料賦值給這個資料,這樣就實現了以第乙個基準為中心,大的資料放在左側,小的資料放在右側。然後左側和右側的資料分別遞迴,每執行依次遞迴,就會有乙個資料確定了位置。
**如下:
3
void
bts_quick
(int data,
int head,
int tail)419
20 data[i]
= key;
2122
bts_quick
(data, head, i -1)
;23bts_quick
(data, i +
1, tail);24
2526
return;27
}
選擇最容易理解,冒泡最常用,快排速度最快。
一般對時間複雜度沒有要求的話,使用的就是氣泡排序,方便理解,如果有要求的話,快排的時間複雜度是最小的,但是快排的空間複雜度會上去,而且新手不容易理解。
寫的不好見諒,排序演算法搭配圖才好理解,但是我還不會在這裡畫圖,讀者只能自己邊看邊畫圖了,新手學演算法最好畫圖,容易理解
排序介紹(選擇 冒泡 快排 堆排序)
問題描述 排序問題 給出一組數字,要求按照數值的大小進行排序 例如 這組資料進行公升序的排列後的順序為 氣泡排序 是一種簡單的排序演算法,它實現的過程 不斷重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作就是重複的進行,直到沒有再需要進行交換的的時候,就...
演算法的效率(氣泡排序 選擇排序 快排)
演算法的效率可以用 時間複雜度o n 來度量。時間複雜度反應了程式執行時間隨輸入規模增長而增長的量級,很大程度上能反應演算法的優略程度。我們最開始認識的排序方法有氣泡排序和選擇排序但是這個演算法的效率怎麼樣呢,讓我們來測試一下。首先,我們隨機生成乙個長度為100000的隨機數組,並選用選擇排序的方法...
學習 排序演算法 快排 選擇 冒泡 桶排序
稍微複習 學習 了一下排序的演算法 選擇 冒泡 桶 快排等 下面的 和講解也是這幾種排序,至於歸併 基數啥的想單獨開一篇部落格 以下單獨 均涉及巨集定義,可以先看思路再到最後看巨集定義內容 本部落格針對洛谷p1177排序模板 並已通過大資料對拍 為公升序排序 快速排序 stl 好,直接sort 想降...