排序算法之直接插入排序算法
#include "stdafx.h"
#include <iostream>
using namespace std;
//输出插入排序对象
void print(int a[], int n,int i)
{
cout << i << ":"; //i=0为初始值
for (int j = 0 ; j < n; j ++)
{
cout << a[j] <<" ";
}
cout << endl;
}
void InsertSort(int a[], int n)
{
for(int i= 1; i<n; i++)
{
if(a[i] < a[i-1]) //若第i个元素大于i-1元素则不做顺序调整,小于的话移动有序表后插入
{
int j= i-1;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i-1]; //先后移一个元素
while(x < a[j]){ //查找在有序表的插入位置
a[j+1] = a[j];
j--; //元素后移
}
a[j+1] = x; //插入到正确位置
}
print(a,n,i); //打印每趟排序的结果
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[8] = {32,13,54,73,28,46,91,65};
print(a,8,0); //打印出初始值
InsertSort(a,8); //直接插入排序算法
return 0;
}
直接插入排序算法的时间复杂度为O(n平方)