插入排序
插入排序的思想:简单来说就是用一个变量来记录你要插入的数据,然后在内层for循环中遍历找到合适的位置插入
外循环执行N-1次,这很明显。
但内循环执行的次数取决于输入:
在最好的情况下,数组已经排序并且(a [j]> X)总是为假所以不需要移位数据,并且内部循环运行在O(1),
在最坏的情况下,数组被反向排序并且(a [j]> X)始终为真插入始终发生在数组的前端,并且内部循环以O(N)运行。
因此,最佳情况时间是O(N × 1) = O(N) ,最坏情况时间是O(N × N) = O(N2).
void insertionSort(int a[],int lenth)
{
int i,j,flag,temp = 0;
for(i = 1; i < lenth; i++){
flag = a[i];
//j--寻找合适位置插入flag
for(j = i - 1; j >= 0 && a[j] > flag; j--){
a[j + 1] = a[j];
}
//找到合适位置将flag插入有序数列
a[j + 1] = flag;
}
for(i = 0; i < 10; i++){
if(i % 5 == 0 && i != 0){
cout << endl;
}
cout << a[i] << " ";
}
}
int main()
{
int a[10] = {9,8,95,84,59,7,29,74,4,41};
insertionSort(a,10);
return 0;
}