数据结构之---C语言实现快速排序(多个版本)

版权声明:学习交流为主,未经博主同意禁止转载,禁止用于商用。 https://blog.csdn.net/u012965373/article/details/48292695

快速排序基本上有如下版本

一、国内教材双向扫描版
二、单向扫描版本
三、随机化版本
四、三数取中分割法
五、非递归版


这里给我前两个版本(较为常用)

版本一:

双向扫描版本:


如图:






代码如下:


//快速排序(版本一)
//带枢轴
//杨鑫
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int a[MAXN + 1], n;
void QuickSort(int left, int right)
{
	int i, j, t, temp;
	if(left > right)
			return;
	temp = a[left];
	i = left;
	j = right;
	while(i != j)
	{
		while(a[j] >= temp && i < j)
		{
			j--;
		}
		while(a[i] <= temp && i < j)
		{
			i++;
		}
		if(i < j)
		{
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
	}
	a[left] = a[i];
	a[i] = temp;
	QuickSort(left, i - 1);
	QuickSort(i + 1, right);
}
int main()
{
	printf("=========快速排序版本一==========\n");
	int i = 0, j, t, count = 0;
	int T;
	printf("请输入要对数据排序的个数:\n");
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d", &a[i]);
	    i++;	
	}
	QuickSort(0, i - 1);
	printf("排序后的数据是:\n");
	for(j = 0; j < i; j++)
	{
		printf("%d ", a[j]);
	}
	return 0;
}





版本二:

单项扫描:

void quickSort2(int x[], int l, int r)
{
	if(l >= r)
		return;
	int m = l;
	for(int i = l + l; i <= r; i++ )
        {
		if(x[i] < x[l])
                {
			swap2(x[++m], x[i]);
		}
	}
	swap2(x[l], x[m]);
	quickSort2(x, l, m - 1);
	quickSort2(x, m + 1, r);

}
void swap2(int &a,int &b)
{
	if(a==b) return;//对同一地址的数据交换,会使其结果为0
	a=a^b;
	b=a^b;
	a=a^b;
}




展开阅读全文

没有更多推荐了,返回首页