C++插入排序


直接插入排序是一種簡單的插入排序法,適用於少量數據的排序,是一種較為穩定的排序算法,本文通過插入排序的方法實現對一個數組進行從大到小和從小到大的排序。

1. 從小到大的插入排序:

例如:給定整型數組a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {1,2,3,4,5,6,7,8}

void InsertSort(int arr[], int n)
{
    int i,j,key;
    for(i = 1; i < n; i++)
    {
        key = arr[i];
        j = i - 1;
        while(j >= 0 && arr[j] > key)
        {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}

2. 從大到小的插入排序:

例如:給定整型數組a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {8,7,6,5,4,3,2,1}

void InverseInsertSort(int arr[], int n)
{
    int i,j,key;
    for(i = n - 2; i >= 0; i--)
    {
        key = arr[i];
        j = i + 1;
        while(j < n &&  key < arr[j])
        {
            arr[j-1] = arr[j];
            j++;
        }
        arr[j-1] = key;
    }
}

測試代碼:

#include <iostream>
void InsertSort(int arr[], int n);
void printArray(int arr[], int n);
void InverseInsertSort(int arr[], int n);
const int n = 8;
int main(int argc, char **argv) {
    int a[n] = {6,5,3,1,8,7,2,4};
    std::cout << "從小到大的插入排序:\n";
    InsertSort(a,n);
    printArray(a,n);
    int b[n] = {6,5,3,1,8,7,2,4};
    std::cout << "從大到小的插入排序:\n";
    InverseInsertSort(b,n);
    printArray(b,n);
    return 0;
}
void InsertSort(int arr[], int n)
{
    int i,j,key;
    for(i = 1; i < n; i++)
    {
        key = arr[i];
        j = i - 1;
        while(j >= 0 && arr[j] > key)
        {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}
void InverseInsertSort(int arr[], int n)
{
    int i,j,key;
    for(i = n - 2; i >= 0; i--)
    {
        key = arr[i];
        j = i + 1;
        while(j < n &&  key < arr[j])
        {
            arr[j-1] = arr[j];
            j++;
        }
        arr[j-1] = key;
    }
}
void printArray(int arr[], int n)
{
    for(int i = 0; i < n; i++)
    {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

輸出:

從小到大的插入排序:
1 2 3 4 5 6 7 8 
從大到小的插入排序:
8 7 6 5 4 3 2 1 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM