关于 int k ;位置的问题,求大神解惑
//程序目的:实现快速排序法//程序问题:主函数中的定义,k和s[n]顺序不同,得到的基数下标不同,而且a[0]的值会出错。求解惑
//备注:程序递归排序部分被省略了,完整程序已附件
排序法_05快速排序法_用递归.zip
(1.36 KB)
#include<stdio.h>
#define N 10
void out_array(int a[],int n) //输出数组
{
int i;
for(i=0;i<n;i++)
printf("a[%d] = %d\n",i,a[i]);
}
int k_array(int a[],int L,int R) //快速排序法第一步:求得基数
{
int i,j,k;
i = L;
j = R;
k = a[0];
while(i<j)
{
while(i<j&&k<=a[j]) //从右到左,找到第一个比k小的
j--;
if(i<j)
{
a[i] = a[j];
i++;
}
while(i<j&&k>a[i]) //从左到右,找到第一个比k大的
i++;
if(i<j)
{
a[j] = a[i];
j--;
}
}
a[i] = k; //退出时将基数填在中间坑里面
return i;
}
void main()
{
/* int k;
int s[N] = {99,58,2,61,49,108,28,76,38,44};
*/
int k;
int s[N] = {99,58,2,61,49,108,28,76,38,44};
printf("the first output array :\n");
out_array(s,N);
printf("the sceond output array :\n");
k = k_array(s,0,N);
out_array(s,N);
printf("\n");
printf("k = %d\n",k);
}