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