#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); //調用時,指針指向下一個元素。
}