排序方法5---快速排序

#include<stdio.h>
#include<iostream>
#define MAXL 100
typedef int KeyType;
typedef char InfoType;
typedef struct
{
	KeyType key;
	InfoType data;
}RecType;
void CreateList(RecType R[], KeyType keys[], int n)
{
	for (int i = 0; i < n; i++)
	{
		R[i].key = keys[i];
	}
}
void Display(RecType R[], int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d", R[i].key);
	}
	printf("\n");
}
void disppart(RecType R[], int s, int t)//显示一趟排序后的结果
{
	static int i = 1;
	int j;
	printf("第%d次划分:", i);
	for (j = 0; j < s; j++)
		printf("     ");
	for (j = s; j <= t; j++)
		printf("%3d", R[j].key);
	printf("\n");
	i++;
}
int partition(RecType R[], int s, int t)
{

	int i = s, j = t;
	RecType tmp = R[i];			//以R[i]为基准
	while (i<j)  				//从两端交替向中间扫描,直至i=j为止
	{
		while (j>i && R[j].key >= tmp.key)
			j--;				//从右向左扫描,找一个小于tmp.key的R[j]
		R[i] = R[j];				//找到这样的R[j],放入R[i]处
		while (i<j && R[i].key <= tmp.key)
			i++;				//从左向右扫描,找一个大于tmp.key的R[i]
		R[j] = R[i];				//找到这样的R[i],放入R[j]处
	}
	R[i] = tmp;
	disppart(R, s, t);
	return i;
}
void QuickSort(RecType R[], int s, int t)
{
	int i;
	if (s<t) 					//区间内至少存在两个元素的情况
	{
		i = partition(R, s, t);
		QuickSort(R, s, i - 1);		//对左区间递归排序
		QuickSort(R, i + 1, t);		//对右区间递归排序
	}
}
int main()
{
	int n = 10;
	RecType R[MAXL];
	KeyType a[] = { 3,7,4,2,8,1,9,0,5,6 };
	CreateList(R, a, n);
	printf("排序前:");
	Display(R, n);
	QuickSort(R, 0, n - 1);
	printf("排序后:");
	Display(R, n);
	system("pause");
	return 1;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Yun_Ge/article/details/85539497