ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

冒泡排序和选择排序,快速到位

冒泡排序和选择排序,快速到位 冒泡排序和选择排序为什么要使用这两种排序方式必看冒泡排序选择排序为什么要使用这两种排序方式必看假如我们手头有一些数字积木要按数字的大小顺序整理好我们只要审好题直接上手就能排就这样…那样…那样…这样…就排出来了。需要我们进行陈述时却觉得表达不清毫无章法所谓只可意会不可言传。这是因为大家智商都差不多够用了但是要创造程序我们还要思路清晰整体流程设计尽量没有冗余因此设计程序是对我们自身思路的整理是挑剔的。同样能够根据题目梳理出最简单的运行逻辑显得尤为必要。那么有没有非常简单的逻辑方式进行排序以方便我们更容易梳理思路编写代码呢当然有我们可以以最值寻找。比如数字按照由小到大的顺序排列第一种每次都寻找数字中的最小值放在序列的开头依此做执行第二种每次都寻找数字中的最大值放在序列的末尾依此做执行。其中第一种叫做选择排序第二种叫做冒泡排序。所以啊冒泡和选择两个字眼不过是两种最简单的排序方式的称呼罢了。冒泡排序根据“每次都寻找数字中的最大值放在序列的最末尾”这句话不难延伸出当我们用两个数值比如10和20做比较时要使较大的数值排在后面即20排在10的后面10 20。所以原序列以每次比较两个数字做判断的话每次都要保证比较后较大的数字往后移动才能保证一圈下来最大的数字在最末尾。代码如下// An highlighted blockvoidmaoPao(){int n;printf(请输入数字元素个数);scanf(%d,n);int a[n];int i,j,t;printf(请输入这%d个要排序的数字值\n,n);for(i0;in;i){scanf(%d,a[i]);//输入需要排序的数字}for(i0;in-1;i)//执行的圈数为n-1圈所以i范围[0,n-2]里有n-1个元素即此for循环可执行n-1圈for(j0;jn-1-i;j)//元素的数组下标号范围,所比较元素a[j]和a[j 1]数组元素下标号从0到n-1每一圈确定一个最末尾元素i从0开始所以每圈的数组下标号为[0,n-1-i]所以在a[j]和a[j 1]中j的最小值为0j1可以取到n-1-i即j范围[0,n-2-i]。if(a[j]a[j1]){//如果元素值大的在前边就交换ta[j];a[j]a[j1];a[j1]t;}//将其依次进行比较并进行调换for(i0;in;i)printf(%d\t,a[i]);//输出排序后的结果return0;}选择排序“每次都寻找数字中的最小值放在序列的开头”对比冒泡自行解释代码如下// An highlighted blockvoidmaoPao(){int n;printf(请输入数字元素个数);scanf(%d,n);int a[n];int i,j,t;printf(请输入这%d个要排序的数字值\n,n);for(i0;in;i){scanf(%d,a[i]);//输入需要排序的数字}for(i0;in-1;i)//和冒泡排序执行的圈数一样多for(ji1;jn;j)//比较元素使用a[0i]和a[j]每圈数组元素下标号[0in-1]在a[i]和a[j]中i作为最左端j左边可以取到0i1右边可以取到n-1即j范围[i1n-1]。if(a[i]a[j]){//如果元素值大的在前边就交换ta[i];a[i]a[j];a[j]t;}//将其依次进行比较并进行调换for(i0;in;i)printf(%d\t,a[i]);//输出排序后的结果return0;}附录冒泡排序和选择排序简略图箭头表示大值/小值 往后/往前移i代表圈数冒泡中j为下标比较用a[j]和a[j1]比较所以jn-1-i就可以。选择排序中i与j都作为下标a[i]与a[j]进行比较所以jn才能索引到最后一位。都是n-1圈第一圈 比较 n-1次第二圈 比较 n-2次第三圈 比较 n-3次…第n-1圈 比较 n-n-1次
返回列表