快速排序 - 数据结构与算法

硅谷探秘者 906 0 0
算法思想

将待排序集合以该集合中随机的一个数为分界点分成左右两个集合,一次排序使其右边的集合的数据全部大于左边的集合,然后再分别递归式的对左右两个集合执行上述排序操作,直到递归集合没有数据,递归结束完成排序。

算法描述
  1. 现有待排序数组s
  2. 令变量i=0,j=s.length
  3. 将待排序的数组s分成两个部分a和b,随机从a或b中取一个中间量temp
  4. 分别用开始用i变量从左向右遍历a,和用j变量从右向左遍历b,直到找到两个变量s[i]和s[j]使s[i]>temp和s[j]<temp并且i<j 然后交换两个变量,然后继续按照上述条件遍历,直到i>=j,使得集合b中的元素全部大于集合a中的元素
  5. 按照递归的方式,将a和b分别当作s继续过程2
public class Test{
	
	static int a[]= new int[]{5,6,8,7,4,2,9,1,1,1,2,4,5,7,8,7,7,8};
	
	public static void main(String args[]){
		quick_sort(0,a.length-1);
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
		System.out.println("--");
	}
	
	public static void quick_sort(int left,int right){
		int i=left,j=right,k=a[left];
		while(i<j){
			while(i<j&&a[i]<k){
				i++;
			}
			while(i<j&&a[j]>k){
				j--;
			}
			if(i<j&&a[i]==a[j]){
				i++;
			}else{
				int t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
		if(i-1>left){
			quick_sort(left,i-1);
		}
		if(right>j+1){
			quick_sort(j+1,right);
		}
	}
}
时间空间复杂度

平均时间复杂度:O(nlogn)

平均空间复杂度:O(n)

猜你喜欢
数据结构与算法 3020 外一部分的所有都要小,然后再按此方对这两部分分别进行,整个过程可以递归进行,以此达到整个变成有列。java实现:packagesort.fast;/****@aut
数据结构与算法 3381 流程--来自百度百科首先设定一个分界值,通过该分界值将组分成左右两部分。将大于或等于分界值的集中到组右边,小于分界值的集中到组的左边。此时,左边部分中各元素都小于或等于分
数据结构与算法 713 思想:把所有需要分成两个集合,一个是待集合,一个是已的集合,每次从未集合顺或随机拿取一个,把它加入到已集合使其有,直到未集合中的被取走完,
数据结构与算法 823 ,若组只有一个元素则无需操作。每次递归束时,左右两个组都是有的,然后对这两个中的进行,使整个组有。直到束。publicclassTest8{ publicstaticint
数据结构与算法 753 思想:希尔是插入的增强版,其主要的思想还是插入的思想。描述:在插入的基础上,对待组进行间隔为inc的分组,然后对每个分组进行直接插入,一次完成后,减小inc
数据结构与算法 4275 (英语:Heapsort)是指利用堆这种所设计的一种。堆是一个近似完全二叉树的,并同时满足堆积的性质:即子点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
数据结构与算法 695 思想:每次从没有的集合a中拿取一个最大或最小的元素,放入有的集合b中,直到a集合中的元素被取完描述:用变量i遍历整个组,用变量j遍历i后面的组,每次交换i比j大的元素,使得i遍历过
数据结构与算法 1112 思想把所有需要分成两个集合,一个是待集合,一个是已的集合,每次从未集合顺或随机拿取一个,把它加入到已集合使其有,直到未集合中的被取走完,束案例
归档
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
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。