广州建设集团网站,wordpress搭建discuz,企业网站 flash,网站域名注册地址之前写过的排序文章#xff0c;放上链接给大家看看。C语言#xff0c;谁都能看得懂的归并排序高中新生开学#xff0c;需要进行军训#xff0c;军训的时候#xff0c;教官需要大家把按高到低排队排好。先随机找到一个比较帅的男生做排头。然后第二个人过来跟这个男生比身高… 之前写过的排序文章放上链接给大家看看。C语言谁都能看得懂的归并排序高中新生开学需要进行军训军训的时候教官需要大家把按高到低排队排好。先随机找到一个比较帅的男生做排头。然后第二个人过来跟这个男生比身高如果比第一个高就排到左边要不就排到右边。然后第三个人过来了他需要在原来的两个人中找到自己的位置。……经过把所有的人插入原来的序列就完成了学生的身高排序。—— 定义插入排序顾名思义就是把未排序的数字插入到已经排序的序列的正确位置。插入排序在很多文章中也会写作直接插入排序。—— 用图片来举例子比如我们需要排序这几个数字我们首先拿出第一个数字6。然后我们取第二个数字和第一个数字6进行排序6被认为是已经排序好的数列因为它就只有一个数字当然是排序好的了。5和6排序后可以得到新的数列前面两个已经是排序好的序列再拿第三个序列和前面的序列比较。然后新排序的序列会变成这样后面的数字都会依次插入前面已经排序好的序列得到一个新的排序好的序列。整个过程如下图—— 插入排序是否是稳定的排序算法什么是稳定排序如果两个位置 A[j] A[k] 相等我们的排序算法不会改变 A[j] 和 A[k]的位置这样的排序算法就是稳定的。比如下面的序列我们把数字5插入到原来的序列中但是原来的序列中也有一个数字5我们不改变原来数字的位置就说明是稳定的排序。—— 代码实现#include stdio.hvoid insert_sort(int arr[], int n)
{int i,j,temp;/*从第一个位置开始1~n-1依次和前面的数据比较*/for (i 1; i n; i){/*保存要插入的值*/temp arr[i];/*找到需要插入数据的位置*/for (j i - 1; temp arr[j] j 0; --j){/*把j位置的数据移动到j1位置向后移动一位*/arr[j 1] arr[j];}/*插入数据*/arr[j 1] temp;}
}#define LENGTH 8int main()
{int i,j;int arr[LENGTH] {6,5,3,1,8,7,2,4};/*排序前*/for(i0;iLENGTH;i)printf(%d ,arr[i]);printf(\n);insert_sort(arr,LENGTH);/*排序后*/for(i0;iLENGTH;i)printf(%d ,arr[i]);printf(\n);return 0;
}
看代码是从第 1 位置开始做插入排序的而且比较是从后往前开始比较。比如第一个位置的数字需要和第0个位置开始比较。如果是第3个位置就需要和第2、1、0这三个位置比较。—— 代码输出6 5 3 1 8 7 2 4
1 2 3 4 5 6 7 8
加上随机数的代码#include stdio.h
#include stdlib.h
#include time.hvoid insert_sort(int arr[], int n)
{int i,j,temp;/*从第一个位置开始1~n-1依次和前面的数据比较*/for (i 1; i n; i){/*保存要插入的值*/temp arr[i];/*找到需要插入数据的位置*/for (j i - 1; temp arr[j] j 0; --j){/*把j位置的数据移动到j1位置向后移动一位*/arr[j 1] arr[j];}/*插入数据*/arr[j 1] temp;}
}#define LENGTH 30int main()
{int i,j;int arr[LENGTH] {6,5,3,1,8,7,2,4};/*随机数设置种子*/srand((unsigned)time(NULL));/*赋值*/for(i0;iLENGTH;i)arr[i] rand()%100;/*排序前*/for(i0;iLENGTH;i)printf(%d ,arr[i]);printf(\n);insert_sort(arr,LENGTH);/*排序后*/for(i0;iLENGTH;i)printf(%d ,arr[i]);printf(\n);return 0;
}—— 代码输出58 90 36 55 5 91 27 56 19 37 69 75 73 24 14 2 40 57 27 86 2 31 6 59 23 92 16 10 62 92
2 2 5 6 10 14 16 19 23 24 27 27 31 36 37 40 55 56 57 58 59 62 69 73 75 86 90 91 92 92
—— 算法复杂度老王带你理解算法复杂度O(1),O(N),O(N^2)时间复杂度和空间复杂度一看就懂面试前必过一遍两个循环遍历算法时间复杂度是 O(N^2)推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~