有人能帮我看一下这个要怎么设计嘛

img


能帮忙提供一个思路也可以

前提:先了解冒泡排序 和 选择排序 ;
1、创建一个存放15个数字的数组;
2、给用户提示:“请输入15个数字”;(这儿我就认为用户输入的都是数字,没有其他的)
3、for循环遍历,让用户输入15次,然后把输入的数字存进数组;
4、调用你写的冒泡排序方法 和 选择排序方法 对数组排序即可。

这两个都是很基本的排序算法。书上、网上 一搜一大把。

从书上找了一个实现,你看看


#include <stdio.h>
void bubble (int a[],int n);
void selectionSort(int list [],int n); 

int main(void){
    
    int num [15] = {15,2,8,9,11,7,6,3,18,25,35,1,5,14,9};
    int temp[15];  //用于测试选择排序 
    
     
    for(int i =0;i<15;i++){
        temp[i] = num[i];
    }
    
    printf("before bubble sort:\n");
    for(int i=0;i<15;i++){
        printf("%d  ",num[i]);
    }
    printf("\n\n");
    
    bubble(num,15);
    
    printf("after bubble sort:\n"); 
    for(int i=0;i<15;i++){
        printf("%d  ",num[i]);
    }
    printf("\n\n");
    
    printf("before selection sort:\n");
    for(int i=0;i<15;i++){
        printf("%d  ",temp[i]);
    } 
    printf("\n\n");
    
    selectionSort(temp,15);
    
    printf("after selection sort:\n");
    for(int i=0;i<15;i++){
        printf("%d  ",temp[i]);
    }
    printf("\n\n");
    
    return 0;
    
    
}


//冒泡排序   
//算法来自 《C语言程序设计》(第3版) 何钦铭 颜晖 主编 高等教育出版社8.3 冒泡排序 8.3.1程序解析 p192页 
void bubble (int a[],int n){
    int i,j,t;
    
    //从数组第2个数开始比较,直到数组最后一个数 
    for(i=1;i<n;i++){
        
        //j取值从数组第一个数开始比较,最后一个数逐步从数组第二个数直到数组第一个数 
        //因为有a[j+1]所以,完整的比较到了数组最后一个数 
        for(j=0;j<n-i;j++){
            
            //如果数组下标j位置的数大于数组下标j+1位置的数,则把他们的数值交换。 
            if(a[j]>a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    } 
}

// 选择排序
//算法参考 Java语言程序设计 基础篇 原书第8版 Y.Daniel Liang 著 李娜译 机械工业出版社 
//  6.10 数组排序 6.10.1 选择排序 程序清单6-8 SelectionSort.java p176页 

void selectionSort(int list[],int n){
    
    
    //外层循环到数组倒数第二个,因为内层有j+1和j<n,故保证比较完了整个数组 
    for(int i=0;i<n-1;i++){
                 
        int currentMin = list[i];  //将数组最小值设置为当前i的值 
        int currentMinIndex = i;  //数组最小值下标设置为i对应的数组下标 
        
        for(int j=i+1;j<n;j++){   //内层循环从i下一个值开始,直到数组最后一个值 
            
            //如果当前数组最小值大于数组位置j的值,则将数组最小值设置为数组位置j的值,
            //数组最小值下标也设置为j 
            if(currentMin>list[j]){   
                currentMin = list[j];
                currentMinIndex = j;
            }
        }
        
        //比较完内层循环,即将数组位置i与数组其余位置的值比较之后发现最小值的下标发生了改变
        //即找到了比数组位置i更小的数
        //则将找到的最小值放到数组i的位置,下一个数组最小值更新为数组i当前的值,继续寻找比数组位置i更小的值 
        if(currentMinIndex!=i){
            list[currentMinIndex] = list[i];
            list[i] = currentMin;
        }
    }
}