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