插入排序的C递归实现,不知道哪里不对.
#include
#define N 5 //数组长度
int no_rec=0; //记录递归次数的变量
void insert_sort(int );
int main()
{
int arr[N]={5,4,3,2,1};
insert_sort(arr);
for(int i=0;i<=N-1;i++)
printf("%d ",arr[i]);
}
void insert_sort(int *arr) //这个指针在递归时从数组首元指向数组的倒数第二 个元素。
{
no_rec+=1;
int key=(arr+1); //根据这个指针,找到数组的下一个元素,也就是需要插入的 元素。
int j=no_rec;
while(j>0 && (arr+j-1)>key) //这一部分就是一般的插入排序了。
{
*(arr+j)=(arr+j-1);
j--;
}
*(arr+j)=key;
if(no_rec<N-1) //根据数组的长度 N,确定调用次数
insert_sort(arr+1); //调用时,指针指向下一个元素。
}
可是为什么不对啊?
我把lz的程序改动了一下,应该正确了,望采纳
#include<stdio.h>
#define N 5 //数组长度
int no_rec=0; //记录递归次数的变量
void insert_sort(int* );
int main()
{
int arr[N]={5,3,4,6,1};
insert_sort(arr);
for(int i=0;i<=N-1;i++)
printf("%d ",arr[i]);
}
void insert_sort(int *arr) //这个指针在递归时从数组首元指向数组的倒数第二 个元素。
{
no_rec+=1;
int key=*(arr+no_rec); //根据这个指针,找到数组的下一个元素,也就是需要插入的 元素。
int j=no_rec;
while(j>0 && *(arr+j-1)>key) //这一部分就是一般的插入排序了。
{
*(arr+j)=*(arr+j-1);
j--;
}
*(arr+j)=key;
if(no_rec<N-1) //根据数组的长度 N,确定调用次数
insert_sort(arr); //调用时,指针指向下一个元素。
}
lz void insert_sort(int )这个函数和insert_sort(arr)不匹配的吧