算法-快速排序

硅谷探秘者 3384 0 2

快速排序的排序流程--来自百度百科

首先设定一个分界值,通过该分界值将数组分成左右两部分。 

  1. 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 
  2. 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 [
  3. 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。 

java代码实现

public class MainTest {
	private static int a[]=new int[] {156,256,1,5,9,7,3,2,6,4,8,9,5,2,8};
	public static void main(String args[]) {
		quicksort(0,a.length-1);
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}
	/**
	 * 	快速排序
	 * @param left
	 * @param right
	 */
	public static void quicksort(int left,int right) {
		int i=left,j=right,temp=a[left];
		while(i<j) {
			while(i<j&&a[j]>temp) j--;
			while(i<j&&a[i]<temp) i++;
			if(i<j&&a[i]==a[j]) i++;
			else {
				int t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
		if(i-1>left) quicksort(left,i-1);
		if(j+1<right) quicksort(j+1, right);
	}
}
猜你喜欢
数据结构与算法 3020 外一部分的所有数据都要小,然后再按此方对这两部分数据分别进行,整个过程可以递归进行,以此达到整个数据变成有列。java实现:packagesort.fast;/****@aut
数据结构与算法 906 思想将待集合以该集合中随机的一个数为分界点分成左右两个集合,一次使其右边的集合的数据全部大于左边的集合,然后再分别递归式的对左右两个集合执行上述操作,直到递归集合没有数据,递归结束完
数据结构与算法 4795 十种理解(前五)1.冒泡冒泡是一种简单的。它重复地走访过要的数列,一次比较两个元素,如果它们的顺错误就把它们交换过来。描述:比较相邻的元素。如果第一个比第二个大,就
数据结构与算法 713 思想:把所有需要的数据分成两个集合,一个是待集合,一个是已的集合,每次从未集合顺或随机拿取一个数据,把它加入到已集合使其有,直到未集合中的数据被取走完,结束
数据结构与算法 753 思想:希尔是插入的增强版,其主要的思想还是插入的思想。描述:在插入的基础上,对待数组进行间隔为inc的分组,然后对每个分组进行直接插入,一次完成后,减小inc
数据结构与算法 4275 (英语:Heapsort)是指利用堆这种数据结构所设计的一种。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
数据结构与算法 823 思想该使用递归实现,思路为:每次递归将待数组在中间位置分成左右两组,分别对左右两个数组进行归并,递归的条件是数组长度必须大于等于3,所以当数组中只有两个数据的时候可以直接进行比较
数据结构与算法 780 思想:对冒泡的一种改进,每次从没有的集合a中拿取一个最大或最小的元素,放入有的集合b中,直到a集合中的元素被取完描述:用变量i遍历整个数组,用变量j遍历i后面的数组,每次遍历i初始
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7 2021年04月  4 2021年05月  4 2021年06月  1 2021年07月  7 2021年08月  2 2021年09月  8 2021年10月  9 2021年11月  16 2021年12月  14 2022年01月  7 2022年05月  1 2022年08月  3 2022年09月  2 2022年10月  2
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。