這三種排序法的時間複雜度都是n^2,所以其實不是很有效率,只是其背後的邏輯較容易理解,因此才會在社課討論它們。如果對此有興趣者,不妨上網蒐羅更有效率、更加優美的的排序法,相信對邏輯的訓練與程式的敏銳度將大有裨益。
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int arr[5] = {5, 1, 7, 2, 9};
int N = 5;
for(int i = 0; i < N; i++)
cout << arr[i] << " ";
cout << endl;
/*Selection Sort: 從未排序的部分,選擇最小者移到已排序部分右方
for(int i = 0; i < N-1; i++){
int min_index = i;
for(int j = i+1; j < N; j++)
if(arr[j] < arr[min_index])
min_index = j;
swap(arr[i], arr[min_index]);
}
Bubble Sort: 兩兩進行比較,最大者如氣泡" 上浮 "到陣列右方
for(int i = 0; i < N-1; i++)
for(int j = 0; j < N-i-1; j++)
if(arr[j] > arr[j+1])
swap(arr[j], arr[j+1]);
Insertion sort: 從未排序部分任意挑一數(一般靠迴圈去挑),插入到已排序部分的對應位置
for(int i = 0; i < N; i++){
int target = arr[i];
int j;
for(j = i; j > 0; j--){
if(target < arr[j-1])
arr[j] = arr[j-1];
else
break;
}
arr[j] = target;
}*/
for(int i = 0; i < N; i++)
cout << arr[i] << " ";
cout << endl;
}
沒有留言:
張貼留言