啊啊啊啊,本人的快排怎么没用啊?求高手指导。
#include<stdio.h>
#include<stdlib.h>
void Swap(int m, int n, int k)
{
k=m;m=n;n=k;
}
int Partition(int l[],int m,int n)
{
int i,j,a,temp;
i=m;j=n+1;a=l[m];
do{
do{
i++;
}while(l[i]<a);
do{
j–;
}while(l[j]>a);
if(i<j){
Swap(l[i],l[j],temp);
}
}while(i<j);
Swap(a,l[j],temp);
return j;
}
void QuickSort(int l[],int left,int right)
{
int k;
if(left<right){
k=Partition(l,left,right);
Partition(l,left,k-1);
Partition(l,k+1,right);
}
}
int main()
{
int l[100000];
int lens,i;
printf(“输入序列的长度:”);
scanf(“%d”,&lens);
for(i=0;i<lens;i++){
l[i]=rand();
}
printf(“随机生成序列元素为:”);
for(i=0;i<lens;i++){
printf(“%d “,l[i]);
}
printf(“\n”);
QuickSort(l,0,lens-1);
printf(“序列从小到大为:”);
for(i=0;i<lens;i++){
printf(“%d “,l[i]);
}
printf(“\n”);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
void Swap(int m, int n, int k)
{
k=m;m=n;n=k;
}
int Partition(int l[],int m,int n)
{
int i,j,a,temp;
i=m;j=n+1;a=l[m];
do{
do{
i++;
}while(l[i]<a);
do{
j–;
}while(l[j]>a);
if(i<j){
Swap(l[i],l[j],temp);
}
}while(i<j);
Swap(a,l[j],temp);
return j;
}
void QuickSort(int l[],int left,int right)
{
int k;
if(left<right){
k=Partition(l,left,right);
Partition(l,left,k-1);
Partition(l,k+1,right);
}
}
int main()
{
int l[100000];
int lens,i;
printf(“输入序列的长度:”);
scanf(“%d”,&lens);
for(i=0;i<lens;i++){
l[i]=rand();
}
printf(“随机生成序列元素为:”);
for(i=0;i<lens;i++){
printf(“%d “,l[i]);
}
printf(“\n”);
QuickSort(l,0,lens-1);
printf(“序列从小到大为:”);
for(i=0;i<lens;i++){
printf(“%d “,l[i]);
}
printf(“\n”);
return 0;
}
解决方案
20
你这个swap毫无作用
void Swap(int m, int n, int k) { k=m;m=n;n=k; }
你要用引用或指针,另外那个k,也就是那个临时变量不需要作为参数传入
void Swap(int &m, int &n, int k) { k=m;m=n;n=k; }
5
同意楼上说法
15
经供参考:
#include <stdio.h> void Quicksort(int a[],int low,int high) { int key=a[low],i=low,j=high-1; if(high<=low) return; while(j>i) { while(j>i&&a[j]>=key) j--; a[i]=a[j]; while(j>i&&a[i]<=key) i++; a[j]=a[i]; } a[i]=key; Quicksort(a,low,j); Quicksort(a,j+1,high); } int main () { int a[8]={3,2,5,8,4,7,6,9}; Quicksort(a,0,8); for(int i=0;i<8;i++) printf("%3d",a[i]); return 0; }