Code Bye

快速排序C语言

啊啊啊啊,本人的快排怎么没用啊?求高手指导。
#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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明快速排序C语言