如題。
實踐了下幾種比較常見的內排演算法。並對各種排序演算法的執行效率也排了個序。
資料量不大的情況下,一般是堆排比較快。
資料量很大時,快排才會有優勢。
截圖如下:為了更清楚看到結果,執行的是debug版。
呵呵。下面來一段bt點的。
看過《瘋狂的程式設計師》嗎?
p162最後乙個段落開頭有這樣一句話:
「絕影晃眼看了看強哥做的題,雖然編譯能通過,但邏輯肯定錯了,氣泡排序法,才乙個for語句,單憑這一點,也就算是連海選都沒通過。」
我看到這裡時,就開始思考:單for排序也是可以的吧。
然後,用c#語言,寫了4個排序。
第乙個只用了乙個 for迴圈。
第二 第三個排序,沒用任何迴圈控制語句。
第四個排序用了乙個for,但只有一句話。
直接貼上**吧。
class programlistarray2 = new list< int >( array1 ) ;
listarray3 = new list(array1);
listarray4 = new list(array1);
console.write("待排序的關鍵字:\n");
print(array1);
console.write("單迴圈排序結果:\n");
sort_1(array1);
print(array1);
console.write("單迴圈排序2結果:\n");
sort_4(array4);
print(array4);
console.write("無迴圈語句排序結果:\n");
sort_2(array2, 0, 1);
print(array2);
console.write("無迴圈語句排序2結果:\n");
sort_3(array3, 0, 1);
print(array3);
}// 在螢幕上列印列表內容
static void print(listarray)
console.write("\n\n");
}static void swap(listarray , int a, int b)
static int swap2(listarray, int a, int b)
/// /// 如果我是強哥。我寫的單for排序會是這樣。
/// 注意了。我只用了乙個for哦
///
static void sort_1(listarray)
static void dosort_1( listarray , int i , int j )
/// /// 但我不是強哥。我是 steven·kyle·lee。
/// 所以,我會搞乙個更加「**」的。
/// 注意了。我沒用任何迴圈關鍵字。只用了3個if。
/// 最後2個形參必須被初始化呼叫為:0,1
///
static void sort_2( listarray , int i , int j )
/// /// 繼續「**」,第二種無迴圈排序
/// 最後2個形參必須被初始化呼叫為:0,1
///
static void sort_3(listarray, int i, int j)
/// /// 將「**」進行到底
/// 單for,1句話排序。
///
static void sort_4(listarray )
}
排序演算法實踐
那天閱讀 之美 這本書的章節,寫個程式試試其中的排序演算法的例子,執行成功後,突然想試試和vc9自帶的 stl sort函式比較一下,測試結果出乎我所料,這個例子比stl 的sort函式一般快上3 4倍之多,覺得很是奇怪,檢查了一下,發現應該是debug版的原因,切換到release版再測,對於小資...
排序演算法實踐
輸入有兩行,第一行是乙個正整數,表示有n個同學參與調查 n 第二行有 個用空格隔開的正整數,為每本圖書的 號 假設圖書的isbn號在 1 1000之間 輸出有兩行,第一行是乙個正整數k,表示需要買多少本書。第二行是k個用空格隔開的正整數,為從小到大已排序的需要購買的圖書的isbn號。先排序,再去重。...
常見排序演算法
一.選擇排序 1.概念 每次從無序的子陣列裡面選擇最小的數,放在有序區的後面 既與無序區的首元素交換 不穩定排序 時間複雜度o n 2 輔助儲存o 1 2.實現 int selection sort int a,int len len為陣列元素個數 二.氣泡排序 1.概念 重複訪問數列n 1次,每次...