排序算法是算法基础中最常见也是最应该掌握的算法。
插入排序的想法,和我们玩扑克牌起牌相似。从左手为空开始,扑克牌背面朝上至于桌上,每次从桌面上摸一张牌,并将其插入到左手正确的位置,使得左手中的牌是有序的。为了找到这张牌的正确插入位置,从右到左逐一比较左手中的牌。当摸完桌上的牌时,左手中的牌就是排序好了的。
#include<iostream>
using namespace std;
void InsertSort(int num[],int n){
for(int i=1;i<n;i++){ //默认手里有一张牌
int key=num[i];//起一张牌
int j=i-1;//从左手牌中右边开始遍历
while(num[j]>key && j>=0){
num[j+1]=num[j];//腾出一个空位
j--;
}
num[j+1]=key;//插入这张牌
}
}
int main(void)
{
int n=10;
int num[10]={9,0,8,7,4,5,6,3,1,2};
InsertSort(num,n);
for(int i=0;i<n;i++) cout<<num[i]<<" ";
getchar();
return 0;
}
插入排序并不是一种很快的排序算法,其算法的时间复杂度为O(n^2).
下一节讲一讲快速排序算法。