数据结构-快速排序 C语言源码

基本思想:

• 任取一个元素 (如第一个) 为中心
• 所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表;
• 对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个

#include<stdio.h>
#include<stdlib.h>
struct KP{
	int*elem;
	int length;
};//定义结构 
void ss(KP& l,int n)
{
		int hj;
		l.elem=(int*)malloc(sizeof(int)*n);
		for(int k=0;k<n;k++)
		{
		scanf("%d",&hj);
		l.elem[k]=hj;	
		}
		l.length =n;
}//动态存储 
void xianshi(KP l)
{
	for(int i=0;i<l.length ;i++)
	{
		printf(" %d ",l.elem[i]);
	}
}//显示线性表 
int quick(KP &l,int low,int high,int &b,int &yd)
{
	int p=l.elem[low];
	int lo,h;
	lo=low;
	h=high;
	while(lo!=h)
	{
		while(lo!=h&&l.elem[h]>=p)
		{
			b++;
			h--;
		}
		int fg=l.elem[lo];
		l.elem[lo]=l.elem[h];
		l.elem[h]=fg;
		yd++;
		while(lo!=h&&l.elem[lo]<=p)
		{
			lo++;
			b++;
		}
		int xg;
		xg=l.elem[lo];
		l.elem[lo]=l.elem[h];
		l.elem[h]=xg;
		yd++;
	}
	return lo;
}
void pai(KP &l,int low,int high,int &b,int &yd)
{
	if(low<high)
	{
		int oi;
		oi=quick(l,low,high,b,yd);
		xianshi(l);
		printf("\n");
		pai(l,low,oi-1,b,yd);
		pai(l,oi+1,high,b,yd);
	}
}
main()
{
	int n;
	printf("请输入表长");
	scanf("%d",&n);
	KP l;
	printf("\n开始输入表中元素");
	ss(l,n);
	int low=0;
	int  high=l.length -1;
	int b=0;
	int yd=0;
	pai(l,low,high,b,yd); 
	xianshi(l);
	printf("\n比较次数为%d 移动次数为%d",b,yd);
	return 0;
}

数据结构-快速排序 C语言源码
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。

但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。

好了,就酱紫。

老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。

最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。

相关文章: