我想用选择排序实现从大到小输出,但好像并不行😭有人告诉我哪儿错了吗
选择排序 要有个下标位 ..
//数组赋值完毕时 i=n-1; 10个数i为9
for (j = 0;j <i-1;j++) //例如:10个数外层循环9次 , j从0取到8
{
//初始化index 为j,外循环一次变一次
index =j;
/*内层循环中:
每个k下标数都和index下标数比较一次
第一轮是0下标元素与1~8下标元素逐一比较,比较完成后最小值放0下标处
第二轮是1下标元素 与2~8下标元素逐一比较... 比较完后最小值放1下标处
.
.
.
最后一轮是 7下标元素 与 8下标元素比较...比较完小值放7下标处,最后剩8下标处元素不用比较
第一次循环比较8次,之后比较次数递减
*/
for (k =index+1;k < i ;k++)
{
if (array[index]>array[k])//如果k下标指向数较小,则替换最小下标,即语句index=k;
{
index=k;
}
}
if(j!=index)//如果初始index下标值(即j值)不等于替换后的index下标值,则交换,使index下标指向最小值,最小值放最前边
{
swap(array,&index,&j); //交换
}
}
你这也不是选择排序啊。选择排序是内层循环每次找出最大值或者最小值,然后将最大值或者最小值与a[i]进行交换。你这一直在交换,肯定不对啊。内层循环只是找出最大或最小值而已
写过一篇选择排序的文章 http://t.csdn.cn/SuCfl 可以去看看
for(j+=i+1;j<n;j++)
我已修改你代码的错误,有帮助的话采纳一下!
# include <stdio.h>
int main(){
int n,i,j,t;
scanf("%d",&n);
int a[n];
for (i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
for(j=i+1;j<=n;j++){
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
printf("%d",a[i]);
}
}
有帮助的话采纳一下哦!