#include <string.h>
#include <stdio.h>
int instersort(int *s,int n)
{
int temp = 0,i = 0,j = 0,k=0;
for(i=1;i<n;i++)
{
k = i;
temp = s[i];
for(j = i-1;(j >= 0) && (s[j] > temp);j--)
{
s[j+1] = s[j];
k = j;
}
s[k] = temp;
}
}
/*
思路:假设n个数排序,依次实现0-0位置上有序,0-1位置上有序,0-n位置上有序。
时间复杂度:插入排序并不像冒泡排序和选择排序那样严格的O(N²),在一些好的情况下,不用每次都交换,但是按照最坏的情况来算,时间复杂度还是O(N²)。
空间复杂度:申请的额外空间有i j,是有限个额外空间,所以空间复杂度是O(1)
写法简单,容易理解,但是每次都要交换,上一个函数是每次只交换1次
*/
void insert_sort(int array[], int len)
{
int i = 0, j = 0;
//0-0 天然有序
//0-i 想要有序
for (i = 1; i < len; i++) // 0-i做到有序
{
for (j = i - 1; j >= 0 && array[j] > array[j + 1]; j--)
swap1(array, j, j + 1);
}
}
int main()
{
int a[11],i; //定义数组及变量为基木整甩
printf("请输入10个数据:\n");
for (i =0;i<10;i++)
scanf("%d",&a[i]); //接收从键盘输入的10个数据到数组a中
printf("原始顺序:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]); //将未排序前的顺序输出
instersort(a,10); //调用自定义函数 insort()
printf("\n 插入数据排序后顺序:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]); //将排序后的数组输出
printf("\n");
return 0;
}
C语言实现插入排序
最新推荐文章于 2025-03-17 15:33:35 发布