选择算法(选择排序咯)
其实这道题就是将选择排序的,要是会选择排序就简单多了。
不会,没关系,请看下面:
- 这有个数组,里面有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)