下面是插入排序的动态图
把无序元素往有序列表中插入,一次排好一个元素,所以元素个数就决定了趟数,单趟的核心思想是两两比较
单指针实现
这是单趟逻辑,两两比较
void InsertSort(int *a,int n)
{
int end;
int tem=a[end+1];
//[0,end]有序, end+1位置的值插入
while(end>=0)
{
if(a[end]>tem)
{
a[end+1]=a[end];
a[end]=tem;
--end;
}
else
{
break;
}
}
}
完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//插入排序
void InsertSort(int* a,int n)
{
int i;
for (i = 0; i < n - 1; i++)
{
int end = i;
int tem = a[end + 1];
//[0,end]有序, end+1位置的值插入
while (end >= 0)
{
if (a[end] > tem)
{
a[end + 1] = a[end];
a[end] = tem;
--end;
}
else
{
break;
}
}
}
}
void print__f(int* a ,int n)
{
int i;
for (i = 0; i< n; i++)
{
printf(" %d", a[i]);
}
}
Insert_Sort(int *a)
{
}
int main()
{
int a[] = { 12,28,20,50,48,1,5,28 };
int n = sizeof(a) / sizeof(a[0]);
print__f(a,n);
printf("\n");
//InsertSort(a,n);
print__f(a,n);
return 0;
}
效果
时间复杂度:O(N^2) 最好情况:顺序,O(N) 最坏情况: 逆序