插入排序思想:默认初始数组下标为0的数字为有序序列,每次从后续数组中顺序拿一个数字,将这个数字放到前面的有序序列中,放的位置要确保放完之后依旧是有序的。
举例说明
初始乱序数组 int a[10]={6,2,4,7,5,8,9,10,3,1}
默认有序序列为6 2 ,4, 7, 5, 8, 9, 10, 3, 1
从后面拿一个数字2
由于2比6小,所有放6前边
2, 6 4, 7, 5, 8, 9, 10, 3, 1
从后面拿一个4
由于4比2大,4不和2交换,再判断4和6的大小,4小于6,4和6交换
2, 4, 6 7, 5, 8, 9, 10, 3, 1
从后面拿一个7
7和2比,不交换
7和4比,不交换
7和6比,不交换
2, 4, 6 ,7 5, 8, 9, 10, 3, 1
从后面拿一个5
5和2比 不交换
5和4比 不交换
5和6比 交换
2, 4, 5, 7 6, 8, 9, 10, 3 ,1
6和7比 交换
2, 4, 5,6, 7 8, 9, 10, 3 ,1
以此类推
源代码如下
#include void insertsort(int* p);
int main()
{
int a[10]={6,2,4,7,5,8,9,10,3,1};
insertsort(a);
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
void insertsort(int* p)
{
int temp;
for(int i=1;i<10;i++)//默认第一个数是有序序列,因此只需要循环n-1次
{
for(int j=0;j{
if(*(p+i) {
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}