這篇文章將會介紹常見的排序演算法(使用 c++ 實現)
將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區為空,無序區包含陣列所有元素
每次從無序區的最後乙個元素開始,一直向前冒泡到無序區的第乙個位置,使其變成有序
將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區為空,無序區包含陣列所有元素templatevoid swap(e a, int i, int j)
templatevoid bubblesort(e a, int n) }}
}
每次從無序區中選擇乙個合適的元素,並將其交換到無序區的第乙個位置,使其變成有序
將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區包含陣列的第乙個元素,無序區包含其餘的元素templatevoid swap(e a, int i, int j)
templatevoid selectionsort(e a, int n)
swap(a, i, minidx);
}}
每次將無序區中的第乙個元素,一直向前交換到有序區中的合適位置,使其變成有序
遞迴進行,每次將陣列一分為二,然後對兩個陣列分別排序後,合併兩個陣列templatevoid swap(e a, int i, int j)
templatevoid insertionsort(e a, int n)
}}}
優化:臨時陣列後半部分反向插入,這樣可以不用檢測邊界情況templatevoid mergesort(e a, e t, int l, int r)
}
遞迴進行,每次在陣列中選擇乙個基準,根據基準將陣列一分為二,然後對兩個陣列分別排序後,拼接兩個陣列templatevoid mergesort(e a, e t, int l, int r)
}
優化:使用棧替代遞迴templatevoid swap(e a, int i, int j)
templatevoid quicksort(e a, int l, int r)
while (i < j && pivot < a[--j]) {}
swap(a, i, j);
} while (i < j);
// put pivot in place
swap(a, r, i);
// recursive
quicksort(a, l, i - 1);
quicksort(a, i + 1, r);
}
測試程式templatevoid swap(e a, int i, int j)
templatevoid quicksort(e a, int l, int r)
while (i < j && pivot < a[--j]) {}
swap(a, i, j);
} while (i < j);
// undo the last swap
swap(a, i, j);
// put pivot in place
swap(a, r, i);
// load up stack
if (i - 1 > l)
if (r > i + 1)
}}
測試結果#include #include using namespace std;
int main()
資料規模
1000
10000
100000
1000000
10000000
100000000
bubble sort
0.003 s
0.355 s
41.414 s//
/selection sort
0.001 s
0.123 s
12.151 s//
/insertion sort
0.002 s
0.224 s
22.881 s//
/merge sort
0 s0.002 s
0.021 s
0.212 s
2.285 s
24.352 s
quick sort
0 s0.002 s
0.017 s
0.175 s
1.826 s
19.498 s
資料結構系列 一 排序演算法
1.2 插入排序 1.3 選擇排序 1.4 歸併排序 1.5 堆排序 1.6 快速排序 基於資料狀況的排序演算法 1.7桶排序 1.8 小結 穩定排序 相對次序並沒有改變 void bubblesortv1 int a,int n 實現 增加乙個sorted標誌,對於有序陣列則不再進行比較判斷。複雜...
資料結構複習筆記(一) 排序
資料結構複習筆記 一 這是我的第一天的學習日記 今天主要學的是排序,這裡我們就簡單的講一下幾種常見的排序 先來看排序的輸入輸出 給定乙個任意無序定長陣列num 10 通過 處理後陣列將變成 看似簡單的過程 可以有很多種處理的方法 先看看第一種排序 這種排序演算法的思路就是 將下乙個需要排的元素插入到...
演算法(一)排序
一 o n 2 的排序演算法 1.選擇排序 selection sort 先找到最小的 public static void selectsort int arr 2.氣泡排序 bubble sort 先找到最大的 public static void bubblesort int arr 3.插入...