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
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 );
}
功能比你要求的多一点
就是键盘输入数字 快速排序后数出排序结果
然后用折半查找法查找任意一个想查找的数字所在位置
你可以看看
稍微改改就是你要的那个程序
#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 );
}