|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个递归函数sort(int array[],int low,int high),实现将数组下标从low到high-1范围内的元素按从小到大的顺序选择排序
- #include<stdio.h>
- int fun(int a[],int low,int high);
- int main()
- {
- int a[10],i;
- for(i=0;i<10;i++)
- {
- scanf("%d",&a);
- }
- fun(a,0,10);
- for(i=0;i<10;i++)
- {
- printf("%2d",a[i]);
- }
- }
- int fun(int a[],int low,int high)
- {
- int i,j,k,t;
- for(i=low;i<high;i++)
- {
- k=i;
- for(j=i+1;j<high;j++)
- {
- if(a[k]>a[j])
- {
- k=j;
- }
- }
- if(k!=i)
- {
- t=a[k];
- a[k]=a[i];
- a[i]=t;
- }
- }
- }
复制代码
我这段为什么没有成功
你的代码存在几个问题:
1. 在主函数中,输入数组元素时,应该使用&a[i]而不是&a。
2. 在主函数中,您调用了fun()函数,但fun()函数并没有返回任何值,因此您需要将fun()函数的返回值类型改为void。
3. 在fun()函数中,您使用了选择排序算法的实现,但是您的fun()函数没有递归调用自身,所以它不是一个递归函数。根据题目要求,您需要实现一个递归函数。
尝试一下如下代码: - #include <stdio.h>
- void sort(int a[], int low, int high);
- int main() {
- int a[10], i;
- for (i = 0; i < 10; i++) {
- scanf("%d", &a[i]);
- }
- sort(a, 0, 10);
- for (i = 0; i < 10; i++) {
- printf("%2d", a[i]);
- }
- return 0;
- }
- void sort(int a[], int low, int high) {
- if (low >= high - 1) {
- return;
- }
- int i, j, min_idx, temp;
- min_idx = low;
- for (i = low + 1; i < high; i++) {
- if (a[i] < a[min_idx]) {
- min_idx = i;
- }
- }
- temp = a[low];
- a[low] = a[min_idx];
- a[min_idx] = temp;
- sort(a, low + 1, high);
- }
复制代码
|
|