C语言,关于选择排序的问题

我想用选择排序实现从大到小输出,但好像并不行😭有人告诉我哪儿错了吗

img

img

选择排序 要有个下标位 ..

    //数组赋值完毕时 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]);
    }     
}

img

有帮助的话采纳一下哦!