一组记录的关键码为(65,33,79,56,38,20,48),利用快速排序的方法,写出以第一个

17. 一组记录的关键码为(65,33,79,56,38,20,48),利用快速排序的方法,写出以第一个记录为基淮得到的一次划分结果

65)33,79,56,38,20,48第一次开始进行
48,33,79,56,38,20(65)第二次
48,33(65)56,38,20,79第三次
48,33,20,56,38(65)79第四次 第一回合结束

(48)33 20 56 38 第二回合(左)第一次开始进行
38 33 20 56(48)第二回合第二次
38 33 20(48)56 第二回合第三次,结束

(38) 33 20 第三回合(左)第一次开始进行
20 33 (38) 第二次,并结束排序

得到结果,20,33,38,48,56,65,79
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-05-19
兄弟 我这两天正好写了一个类似的程序
功能比你要求的多一点
就是键盘输入数字 快速排序后数出排序结果
然后用折半查找法查找任意一个想查找的数字所在位置
你可以看看
稍微改改就是你要的那个程序

#include<stdio.h>
#define Z 15
int a[Z];

void QuickSort ( int a[Z], int low, int high );
int Partition ( int a[Z], int low, int high );

void Quicklook(int a[Z],int low,int high,int x);
int middle (int a[Z], int low, int high, int x);

/*----------------------------快速排序块---------------------------*/

void QuickSort (int a[Z], int low, int high )
{

if ( low < high)
{
int pivotloc= Partition (a, low, high);

QuickSort ( a, low, pivotloc-1);
QuickSort ( a, pivotloc+1, high);
}
}

int Partition ( int a[Z], int low, int high )
{
int temp,i,j,k;
temp=a[low];
i=high;
k=low;
while(k<i)
{
if(a[k] < temp)
{
a[low]=a[k];
for(j=k;j>low+1;j--) a[j]=a[j-1];
a[low+1]=temp;
low++;
k++;
}
else k++;

if(a[i] < temp)
{
a[low]=a[i];
for(j=i;j>low+1;j--) a[j]=a[j-1];
a[low+1]=temp;
low++;
}
else i--;
}
for(i=0;i<=high;i++) if(temp==a[i]) low=i;
return low;
}

/*------------------------------折半查找块-------------------------*/

void Quicklook( int a[Z], int low, int high,int x)
{
int mid,postion;

if(low<high)
{
mid=(low+high)/2;
postion=middle(a,low,high,x);
if(postion==0) Quicklook(a,low,mid-1,x);
if(postion==1) Quicklook(a,mid+1,high,x);
}
else printf("\n没有要查找的元素!\n");
}

int middle(int a[Z],int low,int high, int x)
{
int mid;
if (low<high)
{
mid=(low+high)/2;
if(a[mid]==x) { printf("找到了目标元素%d ",x); printf("位置是%

d\n",mid);}
else if(a[mid]>x) return 0;
else return 1;
}
else printf("\n没有要查找的元素!\n");
}

void main()
{
int N,j,x;
printf("输入要排序的序列的长度:");
scanf("%d",&N);
printf("\n输入序列:");
for(j=0;j<N;j++)
scanf("%d",&a[j]);

QuickSort (a, 0 , N-1);

printf("\n排序后的序列:");
for(j=0;j<N;j++)
printf("%d ",a[j]);
printf("\n");
printf("\n输入带查找的数字:");
scanf("%d",&x);
printf("\n");
Quicklook( a , 0 , N-1 , x );
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网