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

硅谷探秘者 435 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)

猜你喜欢
数据结构与算法 2558 外一部分的所有都要小,然后再按此方对这两部分分别进行,整个过程可以递归进行,以此达到整个变成有列。java实现:packagesort.fast;/****@aut
数据结构与算法 2905 流程--来自百度百科首先设定一个分界值,通过该分界值将组分成左右两部分。将大于或等于分界值的集中到组右边,小于分界值的集中到组的左边。此时,左边部分中各元素都小于或等于分
数据结构与算法 355 思想:把所有需要分成两个集合,一个是待集合,一个是已的集合,每次从未集合顺或随机拿取一个,把它加入到已集合使其有,直到未集合中的被取走完,
数据结构与算法 420 ,若组只有一个元素则无需操作。每次递归束时,左右两个组都是有的,然后对这两个中的进行,使整个组有。直到束。publicclassTest8{ publicstaticint
数据结构与算法 389 思想:希尔是插入的增强版,其主要的思想还是插入的思想。描述:在插入的基础上,对待组进行间隔为inc的分组,然后对每个分组进行直接插入,一次完成后,减小inc
数据结构与算法 3896 (英语:Heapsort)是指利用堆这种所设计的一种。堆是一个近似完全二叉树的,并同时满足堆积的性质:即子点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
数据结构与算法 333 思想:每次从没有的集合a中拿取一个最大或最小的元素,放入有的集合b中,直到a集合中的元素被取完描述:用变量i遍历整个组,用变量j遍历i后面的组,每次交换i比j大的元素,使得i遍历过
数据结构与算法 536 思想把所有需要分成两个集合,一个是待集合,一个是已的集合,每次从未集合顺或随机拿取一个,把它加入到已集合使其有,直到未集合中的被取走完,束案例
归档
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
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议
目录
祝愿神州十三飞行乘组平安归来