1. 程式人生 > >插入排序(c++實現)

插入排序(c++實現)

github部落格傳送門
csdn部落格傳送門

插入排序原理:

動圖

#include<iostream>
using namespace std;

//插入排序
void InsertionSort(int a[], int size)
{
    int i;          //有序區間的最後一個元素的位置,i+1就是無序區間最左邊元素的位置
    for(i = 0; i < size-1; ++i){
        int tmp = a[i + 1];  //tmp是待插入到有序區間的元素,即無序區間最左邊的元素
        int j = i;
        while(j >= 0 && tmp < a[j]){        //尋找插入的位置 
            a[j + 1] = a[j];                //比tmp大的元素都往後移動 
            --j;
        }
        a[j + 1] = tmp;
    }
}

//輸出二維陣列,rows是行數
void PrintArray(int a[][5], int rows)
{
    for(int i = 0; i < rows; ++i){
        for(int j = 0; j < 5; ++j)
            cout << a[i][j] << " ";
        cout << endl;
    }
} 


//主函式 
int main(){
    int b[5] = {50, 30, 20, 10, 40};
    int a2d[3][5] = {{5, 3, 2, 1, 4},{10, 20, 50, 40, 30},{100, 120, 50, 140, 30}};
    InsertionSort(b, 5);
    for(int i = 0; i < 5; ++i)
        cout << b[i] << " ";
    cout << endl;
    for(int i = 0; i < 3; ++i)      //將 a2d每一行均排序 
        InsertionSort(a2d[i], 5);
    PrintArray(a2d, 3);
    return 0;
}

輸出:

結果