插入算法

一、选择排序

//选择排序  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)层次的算法,因为在某些场景下,如果数量级不多的话,时间可以忽略,但是代码实现较为简单
  • 可以作为其他算法中的基础
  • 对于几乎有序的程序插入算法会很有效
posted @ 2020-02-14 14:57  天凉好个秋秋  阅读(238)  评论(0编辑  收藏  举报