快速排序法

1.快速排序原理

快速排序是在冒泡排序上进行的改进,思路如下:

在待排序中的元素随意选一个元素作为基准,一般都是以第一个元素为基准元素。

将元素进行分区,比基准元素元素大的放在其右边,比其小的放在基准元素的左边。

对各个分区重复上述的步骤直到所有元素为有序的。

2.图解如下:

(1)把第一个元素作为基准元素,用于比较进行分区,比基准元素元素大的放在其右边,比基准元素小的放在其左边,设置low索引,用来搜索比基准元素小的,设置high索引,用来搜索比基准元素大的元素。

(2)从high索引从右往左依次扫描,5和基准元素6进行比较,5<6, 则将5放在low索引处,之后将low索引右移,操作后数据如下:

 (3)从low索引从左往右扫描,4和基准元素6进行比较,4 <6,low索引继续右移动,操作后如下:

(4)继续从low从左往右扫描,2和基准元素进行比较,2<6,low索引继续向右移动,操作后如下图: 

(5)继续从low索引处从左往右扫描,9和基准元素进行比较,9>6, 这时将9赋值给high索引处,之后high索引进行向左移动一个元素,操作后如下图:

 (6)从high索引处从右往左扫描,8和基准元素进行比较,8>6,此时high继续左移一个元素,这是low索引和high索引指向同一个元素,将基准元素6赋值到low索引处,操作后如下图:

此时low索引和high索引相同,第一轮排序结束,你会发现,比基准元素小的都在其左边,比基准元素大的都在其右边。之后对左右俩个区域重复上述操作直到所有元素为有序。

3.快速排序的实现

C语言实现代码如下:

void quickSort(int arr[], int low, int high)
{
	int first = low;
	int last  = high;

	int key = arr[first];//设置第1个数为 key,备份

	if(low >= high)
		return;
	//一轮的调整(比 key 大的放在右边, 比 key 小的放在左边)
	while(first < last)
	{
		//从右往左,找到比key 小的数放到 first 位置,找到比 key 大的数,继续往左移动
		while(first < last && arr[last] > key)
		{
			last--;
		}
		//将左边比基准值小的赋值到 last 索引位置
		arr[first] = arr[last];
		
		//从左往右,找到比 key 大的数放到 last 位置
		while(first < last && arr[first] < key)
		{
			first++;

		}
		//将右边比基准值大的赋值到 first 索引位置
		arr[last] = arr[first];

	}

	arr[first] = key;//一轮结束后

	quickSort(arr,low,first - 1);//对前面一半进行排序 

	quickSort(arr,first + 1,high);//对后面一半进行排序
}


     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值