各常見排序演算法實踐

2022-09-22 03:48:13 字數 1779 閱讀 8811

如題。

實踐了下幾種比較常見的內排演算法。並對各種排序演算法的執行效率也排了個序。

資料量不大的情況下,一般是堆排比較快。

資料量很大時,快排才會有優勢。

截圖如下:為了更清楚看到結果,執行的是debug版。

呵呵。下面來一段bt點的。

看過《瘋狂的程式設計師》嗎?

p162最後乙個段落開頭有這樣一句話:

「絕影晃眼看了看強哥做的題,雖然編譯能通過,但邏輯肯定錯了,氣泡排序法,才乙個for語句,單憑這一點,也就算是連海選都沒通過。」

我看到這裡時,就開始思考:單for排序也是可以的吧。

然後,用c#語言,寫了4個排序。

第乙個只用了乙個 for迴圈。

第二 第三個排序,沒用任何迴圈控制語句。

第四個排序用了乙個for,但只有一句話。

直接貼上**吧。

class program

listarray2 = 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次,每次...