插入算法
一、选择排序
//选择排序 O(n^2) void selectSort(int arr[],int n) { for(int i = 0;i < n; i++){ int minIndex = i; //寻找 [i,n]的最小值 for(int j = i + 1; j < n; j++){ if(arr[j] < arr[minIndex]) { minIndex = j; } } swap(arr[i],arr[minIndex]); } }
二、插入排序
#include <iostream> #include <algorithm> using namespace std; /** * 插入排序:类似打扑克 **/ template<typename T> void insertSort(T arr[],int n){ for(int i = 1; i < n ; i++){ //优化:先找到插入的位置,再交换 int j; T e = arr[i]; for(j = i; i > 0 && (e < arr[j-1]);j--){ arr[j] = arr[j-1]; } swap(arr[j],e); } } int main() { int a[10] = {10,9,8,7,6,5,4,3,2,1}; insertSort(a[10],10); for(int i = 0;i < 10;i++){ cout << a[i] << endl; } return 0; }
三、关于O(n^2)层次算法的一些思考
- 为什么要学习O(n^2)层次的算法,因为在某些场景下,如果数量级不多的话,时间可以忽略,但是代码实现较为简单
- 可以作为其他算法中的基础
- 对于几乎有序的程序插入算法会很有效