C语言:用递归的方式对数组排序 10

原题如下:编写程序,要求用户录入一串整数(把这串整数存储在数组中),然后通过调用selection_sort函数来排列这些整数。在给定n个元素的数组后,election_... 原题如下:
编写程序,要求用户录入一串整数(把这串整数存储在数组中),然后通过调用selection_sort函数来排列这些整数。在给定n个元素的数组后,election_sort函数必须做下列工作:
搜索数组找出最大的元素,然后把它移到数组的最后面;
递归的调用函数本身对前面的n-1个数组元素进行排序。
下面是我自己写的程序:(运行结果不对,求大神指导!!!)
#include <stdio.h>

#define N 8

int selection_sort(int a[], int n){
int m, max;
m = n;
max = a[0];
for(n = 0; n < m; n++){
if(max <= a[n]){
max = a[n];
a[n] = a[m - 1];
}
}
a[n - 1] = max;
return a[n - 1];
n = m -1;

while(n > 0){
selection_sort(a, n -1);
n--;
}
}

int main(void){
int a[N], n;
n = N;
printf("录入数组a的各个元素:");
for(n = 0; n < N; n++)
scanf("%d", &a[n]);

for(n = 0; n < N; n++)
a[n] = selection_sort(a, N);

printf("按照从大到小的顺序输出数组a为:");
for(n = 0; n < N; n++)
printf("%d ", a[n]);
printf("\n");
return 0;
}
展开
 我来答
xoaxa
2015-06-10 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3478万
展开全部
#include <stdio.h>

#define N 8

void selection_sort(int a[], int n) {
int i, t, imax = 0;
if(n < 1) return;
for(i = 1; i < n; ++i) {
if(a[imax] < a[i])
imax = i;
}
if(imax != n - 1) {
t = a[n - 1];
a[n - 1] = a[imax];
a[imax] = t;
}
selection_sort(a, n - 1);


int main(void) {
int i, a[N] = {8,5,4,6,1,2,3,7};
printf("排序前:\n");
for(i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
selection_sort(a, N);
printf("排序后:\n");
for(i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
857716002
2015-06-09 · TA获得超过698个赞
知道小有建树答主
回答量:799
采纳率:0%
帮助的人:224万
展开全部
#include <stdio.h>  //递归应该用函数递归。。。不然你会想不清楚的

#define N 8

int selection_sort(int a[], int n){
    
    int  max,k,change;
if(n==1)
    return 0;
    max = a[0];
    for(int i = 0; i < n; i++){
        if(max <= a[i]){
            max = a[i];
            k=i;
        }
    }
    change=a[k];
    a[k]=a[n-1];
    a[n-1]=change;
    
 
    return selection_sort(a,n-1);

}

int main(void){
    int a[N], n;
    n = N;
    printf("录入数组a的各个元素:");
    for(n = 0; n < N; n++)
        scanf("%d", &a[n]);
    
   
        a[n] = selection_sort(a, N);
    
    printf("按照从大到小的顺序输出数组a为:");
    for(n = 0; n < N; n++)
        printf("%d ", a[n]);
    printf("\n");
    return 0;
}
追问
亲~好想有个错误唉~ 不是int i=0;
貌似是在
if(max <= a[i]){
max = a[i];
k=i;
}
这一块有错误。。。
追答
哦,我去测试了一下,直接复制的,,,测试数据也通过了,你调一下编译器吧,这些没有错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式