前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速排序 c/c++

快速排序 c/c++

作者头像
用户2965768
发布2018-12-28 15:04:55
1.1K0
发布2018-12-28 15:04:55
举报
文章被收录于专栏:wymwym

 选择基准数(为方便选取第一个元素),定义两个指针 i, j

i从头开始扫, j从尾开始扫

使得基准数左边的元素小于基准数, 基准数右边的元素大于基准数

由于基准数选取的是第一个元素,j 先动, 找到小于基准数的值,i再动, 找到大于基准数的值,交换i和j的值

直到i和j相遇, 则把相遇位置的值和基准数的值交换

这时把数组看作只有三个元素,小于基准数,基准数, 大于基准数,此时是有序的

按照这种思想,递归处理小于基准数和大于基准数两部分

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
void quick_sort(int *arr,int left,int right)
{
	if(left>right)
	return;
	
	int i = left; 
	int j = right;
	int at = *(arr+left);
	
	while(i!=j)
	{
		while(*(arr+j)>=at&&i<j)
			j--;
		
		while(*(arr+i)<at&&i<j)
			i++;
		
		int tp = *(arr+j);
		*(arr+j) = *(arr+i);
		*(arr+i) = tp;
		
	}
		int tp = *(arr+left);
		*(arr+left) = *(arr+i);
		*(arr+i) = tp;
	
	quick_sort(arr,left,i-1);
	quick_sort(arr,i+1,right);
}

int main()
{
	int arr[] = {6,1,2,7,9,3,10,5,4,8};
	
	quick_sort(arr,0,9);
	for(int i=0;i<10;i++)printf("%d ",arr[i]);
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档