一 插入排序分析
对于这种插入排序呢,我认为这就是另一种排序的思想,逐个拿出每一个元素从该元素的前一个开始比较(从小到大),如果该元 素比它的前元素小,就将前元素的值赋值给该元素,直到不满足条件为止j>=0&&array[j]>min,当循环结束后, 执行 array[j+1]=min;就可以成功的将元素插入,其实这样做的话,数组前面就是有序的,而后面是无序,思想就是这样子了,但是对于时间的复 杂度吗?按照最坏的情况就是倒序时,你在正序排一遍,假如我5个数,5,4,3,2,1
可以很容易的看出来O(n)=1+2+3+4+ · · · · ·+(n-1)这为前n-1项数之和,即就是时间复杂度为O(n^2)
二 代码
#include<stdio.h> #include<time.h> #include<stdlib.h> void insertsort(int array[],int n) // 实现排序的函数 { int i,j,min=0; for(i=0;i<n;i++) { min=array[i]; for(j=i-1;j>=0&&array[j]>min;j--) array[j+1]=array[j]; array[j+1]=min; } } int main() // 主函数 { int array[100]; int i=0,n; srand ( (unsigned)time (NULL) ); printf("请你输入要排序的个数: "); scanf("%d",&n); printf("随机产生%d个数: ",n); for(i=0;i<n;i++) { array[i]=rand()%10+10; //产生10~20之间的数 printf("%d ",array[i]); } insertsort(array,n); // 实现排序的函数 printf("\n排序之后为:",n); for(i=0;i<n;i++) { printf("%d ",array[i]); } printf("\n"); return 0;
三 结果演示
为了方便起见,我直接用来随机产生数的函数,只要输入你要排序几个数即可,如果想手动输入的话,对上面简单修改就可以了,我也就不废话了
时间: 2024-12-29 11:30:56