开发者社区> 问答> 正文

C语言编程题:用选择法对10个整数排序

使用子函数来做,不能使用指针

展开
收起
知与谁同 2018-07-20 16:48:29 2435 0
4 条回答
写回答
取消 提交回答
  • 社区管理员

    选择排序的工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。

    给你一个我写的例子(C语言程序设计案例教程(廖湖声) P122 第四章 上机练习 第一题):网页链接看着这个自己修改一下,学习效果更佳。你可以放到codeblocks中用执行,并用菜单中的Debug->Debugging windows->watches来看变量的变化,加油。

    2019-07-17 22:49:55
    赞同 展开评论 打赏
  • 这个时候,玄酱是不是应该说点什么...
    第二个嵌套的for语言里不应该是j=i+1而是j=0才对

    -------------------------

    #include <stdio.h>
    //简单选择排序
    void SelectSort(int r[ ], int n)
    {
    int i;
    int j;
    int index;
    int temp;
    for (i=0; i<n-1; i++) //对n个记录进行n-1趟简单选择排序
    {
    index=i;
    for (j=i+1; j<n; j++) //在无序区中选取最小记录
    if (r[j]<r[index])
    index=j;
    if (index!=i)
    {
    temp=r[i];
    r[i]=r[index];
    r[index]=temp;
    }
    }
    }
    void main()
    {
    int num[20];
    int a,b,c,t;
    for (c=0;c<10;c++)
    scanf("%d",&num[c]);
    SelectSort(num,10);//调用用SelectSort(num,10)即可
    for(c=0;c<10;c++)
    printf("%d ",num[c]);
    getch();
    }

    2019-07-17 22:49:55
    赞同 展开评论 打赏
  • #include<stdio.h>
    main()
    {
    int a[10],i,j,t;
    printf("please input ten int numbers:");
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    for(i=0;i<10;i++)
    for(j=i+1;j<10;j++)
    if (a[i]>a[j]) {
    t=a[i]; a[i]=a[j]; a[j]=t; }
    for(i=0;i<10;i++) printf("%d ",a[i]);
    }
    2019-07-17 22:49:55
    赞同 展开评论 打赏
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    //选择排序 每次找出所剩元素中最小(大)的值
    void selectionSort(int arr[],int n)
    {
    for (int i = 0; i < n; i++){
    //寻找[i,n)区间的最小值
    int minIndex = i;
    for (int j = i + 1; j < n; j++)
    if (arr[j] < arr[minIndex])
    minIndex = j;
    swap(arr[i], arr[minIndex]);
    }
    }

    -------------------------

    排序有很多种算法。我就随便给你来一个吧。
    #include <stdio.h>
    void Sort(int k[])
    {

    int x=0,j1,j;
    for(j1=0;j1<9;j1++)
    {
    j=j1+1;
    for(j;j<10;j++)
    {
    if(k[j1]<k[j])
    {
    x=k[j1];
    k[j1]=k[j];
    k[j]=x;
    }
    }
    }
    for(j=0;j<10;j++)
    printf("%d\t",k[j]);
    }
    int main()
    {
    int k[10]={84,34,66,45,77,387,57,88,47,32};
    Sort(k);//子函数算法
    /*int x=0,j1,j;//直接实现
    int k[10]={84,34,66,45,77,387,57,88,47,32};
    for(j1=0;j1<9;j1++)
    {
    j=j1+1;
    for(j;j<10;j++)
    {
    if(k[j1]<k[j])
    {
    x=k[j1];
    k[j1]=k[j];
    k[j]=x;
    }
    }
    }
    for(j=0;j<10;j++)
    printf("%d\t",k[j]);
    */
    return 0;

    2019-07-17 22:49:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载