首页 > 其他分享 >快排

快排

时间:2023-11-02 10:12:41浏览次数:21  
标签:int long 快排 1e6 排序 指针

//快速排序 
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+5;
int n;
int a[N];
void s(int l,int r){//快速排序函数 
	if(l>=r)	return ;//递归结束条件 
	int i=l;//将左指针给i 
	int j=r;//将右指针给j 
	int q=a[r];//q代表基数 
	while(i<j){ 
		while(a[i]<=q&&i<j){ //从左向右找比key大的值 
			i++;
		}
		a[j]=a[i];//不成立交换i,j对应的值
		while(a[j]>=q&&i<j){//从右向左找比key小的值 
			j--;
		}
		a[i]=a[j];//不成立交换i,j对应的值 
	}
	a[j]=q;//基数与j对应值交换 
	s(l,i-1);//进行递归左部分 左指针为l 右指针为i-1 
	s(i+1,r);//进行递归左部分 左指针为i+1 右指针为r 
} 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	s(1,n);
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}


标签:int,long,快排,1e6,排序,指针
From: https://www.cnblogs.com/gongyuchen/p/17804786.html

相关文章

  • 02 快速排序(快排)
    #include"stdio.h"voidQuickSort(int*array,intlow,intheight){inti,j,tmp;//两个哨兵,和开头的元素下标inttemp;i=low;j=height;tmp=array[low];if(i>j)//如果下标i大于下标j,函数结束运行{return;}......
  • 快排模板
    voidquick_sort(inta[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=a[l+r>>1];while(i<j){doi++;while(a[i]<x);doj--;while(a[j]>x);if(i<j)swap(a[i],a[j]);}quick_sort(......
  • 简单分治快排问题解析(c++实现)
    这几天刷了需要使用分治快排思想去解决的几道比较好的题目,所以写下这篇博客用于复习和以后的复盘。什么是分治快排思想首先我们要知道什么是分治快排思想,这个思想其实就是在模拟实现qsort算法的时候使用的一个方法,在模拟实现qsort的时候,我们知道第一步是需要使用一个随意选择(三数取......
  • 双边快排的基准点和先判断left还是right问题
     前同事问了我一个双边快排的算法,他问我怎么都无法正常排序,代码如下,publicstaticvoidmain(String[]args){int[]arr=newint[]{7,3,6,4,8,9,0,22,28,2,3,79,24};arr=newint[]{4,4,6,5,3,2,8,1};System.out.println("left:"+0+"right:"......
  • 快排及链表排序
    文章目录一、普通的快排二、链表的创建三、链表的冒泡排序四、链表快排五、链表归并排序一、普通的快排voidQuickSort(vector<int>&vec,intlow,inthigh){ intpivot=vec[low];//选择第一个元素作为枢纽元 //mid总是指向最后一个比枢纽元小的位置,当需要交换元素时,先......
  • master公式 归并排序 小和问题 逆序对问题 荷兰国旗问题 快排
    递归行为时间复杂度计算:master公式T(N)=a*T(N/b)+O(Nd)N:母问题规模a:子问题计算次数N/b:子问题规模O(Nd):每次递归除子问题外其他操作时间复杂度1)log(b,a)>d : T(N)=O(Nlog(b,a)) 2)log(b,a)<d : T(N)=O(Nd) 3)log(b,a)==d : T(N)=O(Nd*logN) 使用ma......
  • BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的p
    下面为代码实现,其所求为前k小的数:#include<iostream>#include<algorithm>usingnamespacestd;intInsertSort(intarray[],intleft,intright);intGetPivotIndex(intarray[],intleft,intright);intPartition(intarray[],intleft,intright,intpivo......
  • 快排/归并/二分
    排序快速排序主要思想:分治排序方式:确定分界点:左边界:q[l],中间值:q[(l+r)/2],右边界,或者随机调整区间:小于等于x的在x左半边,大于等于x的在x右半边(最难的部分)法一:开a[],b[]扫描一遍q[],q[i]>=xq[i]->a[];q[i]<=xq[i]->b[];a[]->q[]b[]->b[]法二(更优美):......
  • javascript 快排
    functionquickSort(arr){//如果数组只有一个数,就直接返回;if(arr.length<1){returnarr;}//找到中间的那个数的索引值;如果是浮点......
  • 【基础算法】八大排序算法:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序(快排)
    ✔️前言......