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;
} 展开
编写程序,要求用户录入一串整数(把这串整数存储在数组中),然后通过调用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;
} 展开
2个回答
展开全部
#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;
}
展开全部
#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;
}
这一块有错误。。。
追答
哦,我去测试了一下,直接复制的,,,测试数据也通过了,你调一下编译器吧,这些没有错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询