快速排序——C语言实现

一、排序算法的基本分类:

插入排序类:直接插入排序--------(改进)-------->希尔排序
选择排序类:简单选择排序--------(改进)-------->堆排序
归并排序类:归并排序
交换排序类:冒泡排序--------(改进)-------->快速排序

二、快速排序算法基本思想:

利用分治法的思想,在序列中任选一个记录作为基准(由自己设定),以此基准将当前无序序列划分为左、右两个较小的子序列,并使左边子序列中所有记录的关键字均小于等于基准记录的关键字,右边子序列的所有记录的关键字均大于等于基准记录的关键字。基准记录无需参与后续的排序。
通过递归调用对左、右子序列进行同样的快速排序,直到序列的长度为1时,递归结束。

快速排序与归并排序算法上的区别:
快速排序在两个递归调用结束后,其序列已有序。对快速排序而言,“回归”的过程无须做什么,可以看成是空操作。——快速排序的排序过程是在“递”的阶段就完成了,而归并排序的排序过程是在“归”的阶段完成的。

三、快速排序的代码实现:

思路:
定义下标low和high,分别指向当前序列的第一个元素和最后一个元素。对当前序列调用排序函数,指定基准元素(可取序列的第一个元素为基准元素),当基准位置右边的元素大于等于基准元素时,不进行操作,只将high–;当基准位置右边的元素小于基准元素时,将两者互换。当基准位置左边的元素小于等于基准元素时,不进行操作,只将low++;当基准位置左边的元素大于基准元素时,将两者互换,直到下标low = high为止,此时完成了对当前序列的左子序列和右子序列的划分。再递归分别实现左子序列和右子序列的划分,直到low = high(序列长度为1)时,递归结束,也就完成了快速排序。

#include<iostream>
using namespace std;

void swap(int a[], int low, int high) //元素交换函数
{
   
	int temp = a[low];
	a[low] = a[high];
	a[high] = temp;
}

int QSort(int a[], int low, int high) //排序函数,实现基准位置的确定和左右子序列的划分
{
   
	int point;
	point = a[low]; //设定基准元素为序列第一个元素
	while (low < high)
	{
   
		while (low < high && point <= a[high])
		{
   
			high--;
		}
		swap(a, 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值