2020-06-10

選擇排序、泡沫排序、插入排序的參考程式碼

        以下是選擇排序、泡沫排序、插入排序的範例程式碼,能將一個包含五個整數的陣列由小到排到大。
        這三種排序法的時間複雜度都是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;
}



沒有留言: