算法导论第二章-练习2.2-2

选择算法(选择排序咯)

其实这道题就是将选择排序的,要是会选择排序就简单多了。

不会,没关系,请看下面:

  • 这有个数组,里面有N个元素,如3,5,4,1,2
  • 第一次循环,找个最小的元素找到第四个值为1,
  • 将第四个与第一个换一下,1,5,4,3,2
  • 开始第二个循环,从第二个开始,第一个最小啦,不比较了
  • 后四个比较,第五个最小,将第五个与第二个换一下
  • 序列为:1,2,4,3,5
  • 在进行两次循环后,剩下最后一个5,他就是最大的了,不用排序了
  • 最后经过n-1次即四次后得到:1,2,3,4,5;

下面放代码(嗷呜!!!!)

#include<stdio.h>
void Select(int number[],int n);
int main(void) {
 int number[5]={3,5,4,1,2};
 Select(number,5);
} 
void Select(int number[],int n) {
 for(int i=0;i<4;i++) {
  for(int j=i+1;j<5;j++) {
   int key=number[i];
   if(number[i]>number[j]) {
    number[i]=number[j];
    number[j]=key;
   }
  }
 }
 /*for(int i=0;i<5;i++) {
  printf("%d ",number[i]);
 }*/
}

从上面代码可以看出 只比较到序号3,即前四个,最后一个不用比较;

输出结果如下

在这里插入图片描述

//鄙人是博客新手,暑期会一直学算法导论,并发布自己写的习题答案的,如有错误

请各位大哥大姐指出,不胜感激

有疑问的也可以提出来,大家一起解决,一起学习,一起进步!!

更新:

最好情况和最坏情况耗费时间

不论最好最坏的时间 ,循环次数都是一样的 ,即O(n^2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name大权子

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值