搜索

C语言选择排序法

gecimao 发表于 2019-05-05 06:21 | 查看: | 回复:

  代码如上,我的问题是,第一次执行时,用a【0】和a【1】比较,如果满足a【0】a【1】则交换两者位置,第二次是比较a【0】和a【2】还是比较a【1】和a【2】。k在第一次比较完后因为倒数第二行代码不是已经变成K=1了吗,也就是以后再也不会让a【0】和后面的数字相比较了,但是如果这样就实现不了选择排序的功能啊,很纠结

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  这是选择排序。先用a[0]与a[1]比较,当a[0]a[1]时并不交换,而用k记下来现在a[0]最小……这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;jn;j++)的循环体,要等它循环完了后才执行一次。恍然大悟,原来交换值要内循环完一次才进行。内循环只是在记录最小的。谢谢

  for(j=i+1;jn;j++)//这儿从i+1开始,就是为了和i后面的每一个数进行比较,选出最小的

  a[0]先与a[1]比较,如果,a[0]a[1],那么a[0]和a[2]比较,如果a[0]a[1],那么此时k!=0,而是等于1了,然后a[k]与a[2]比较

  首先假定第i个元素最小(或最大--增排序),并用k记录,内循环j从第i + 1个元素开始逐个与第k个元素比较,如果满足array[j] array[k],则执行k = j,k始终保存最小元素的下标,j循环结束后,再进行k与i比较,如果满足i == k,则原先假定正确,不需要交换,否则,假定是错的,则需要交换,这样就确保第i轮循环结束后,array[i]是最小的。

  这么说显得枯燥,你可以取用只有几个元素的数组手工模拟排序,理解原理后就很容易记住选择排序的代码啦。我不懂的是如果第一次比较后a0小于a1,k=j=1,下一次内循环就只能用a1和a2比,a0再也不参与比较了,

  如果看完还不明白,我可以帮你找下我学习时的视频发给你,视频里面讲得非常清楚。

  千锋教育专注HTML5前端、Java开发、Python全栈、UI设计、物联网嵌入式、区块链、大数据、人工智能、软件测试、PHP、云计算、信息安全、Unity游戏开发、红帽RHCE认证培训服务选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

  简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

本文链接:http://baumseelen.com/duipaixu/430.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部