栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 快速排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 快速排序

快速排序 基本思路
  • 首先,定义两个指针left、right,分别指向当前数组的第一个元素和最后一个元素
  • 将当前数组的第left个位置记为key
  • 得到key的值之后,将right所指位置的元素与key值相比较,若小于key值,则将right所指位置的元素赋给left所指的元素,然后进行right–操作;否则,直接进行right–
  • 再将left所指元素与key相比较,若大于key值,则将left所指位置的元素赋给right所指的元素,然后进行left++操作;否则,直接进行left++
  • 知道left的值与right的值相等,将key的值赋给left所指的位置,并记下left的值。
  • 此时,一趟排序完成,left左边均比left所指位置的值小,右边均比left所指位置的值大。相当于将一个数组分为两部分,之后再对这两部分进行快排。
  • 运用递归思想,不断将一个数组按照一个特定值分为左边小于特定值和右边大于特定值。
    完整代码如下
#include
#include
#define Max 100


void QuickSort(int A[], int left, int right);      //快排
int Quickpass(int A[], int low, int high);     //一趟快排


int main()
{
	int n;
	printf("请输入要排序的元素的个数:");
	scanf("%d", &n);
	int i;
	int A[Max];
	for (i = 1; i <= n; i++)
	{
		scanf("%d", &A[i]);     //输入数据,放入数组A中
	}
	QuickSort(A,1,n);   //快排
	for (i = 1; i <= n; i++)
	{
		printf("%dt", A[i]);    //打印排好序的数组
	}
	return 0;
}



void QuickSort(int A[], int left, int right)     //快排
{
	if (left < right)   
	{
		int pos = Quickpass(A, left, right);   //定位left和right相等时候的位置,此位置的左边比A[pos]小,右边比A[pos]大
		QuickSort(A, left, pos - 1);    //对pos左边,再进行一次快排
		QuickSort(A, pos + 1, right);   //对pos右边,再进行一次快排
	}
}



int Quickpass(int A[], int low, int high)    //一趟快排
{
	int key = A[low];
	while (low < high)
	{
		while (low < high && A[high] >= key)    //当high所指位置的值大于key时,high向前移动
			high--;
		A[low] = A[high];    //将high所指位置的值赋给low
		while (low < high && A[low] < key) 
			low++;
		A[high] = A[low];
	}
	A[low] = key;    //将key赋给low和high相等时候所指位置的值
	return low;      //并返回该位置
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号