快速排序 O(nlogn)
#include<bits/stdc++.h>
using namespace std;
int a[200],n;
void q_sort(int l,int r){
if(l>r)
return;
int i=l,j=r,md,t;
md=a[l];
while(i!=j){
while(a[j]>=md&&i<j)
j--;
while(a[i]<=md&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[l]=a[i];
a[i]=md;
q_sort(l,i-1);
q_sort(i+1,r);
}
int main(){
int i;
while(cin>>n){
for(i=0;i<n;i++)
cin>>a[i];
q_sort(0,n-1);
for(i=0;i<n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
return 0;
}
其实非递归就是把需要递归的左右边界记录就好了
#include<iostream>
using namespace std;
struct lr{
int l,r;
};
const int N = 1e3 + 10;
int a[N];
void q_sort(int *a,int L,int R)
{
lr t[N];
int cur = 1;
t[cur].l = L,t[cur].r = R;
while(cur)
{
int last = cur;
int up = t[cur].r,down = t[cur].l;
//cout << down << " " << up << endl;
cur--;
int temp = a[down];
while(down < up)
{
while(a[up] >= temp && up > down)
--up;
while(a[down] <= temp && up > down)
++down;
if(down < up)
{
int na = a[down];
a[down] = a[up];
a[up] = na;
}
}
a[t[last].l] = a[down];
a[down] = temp;
if(down - 1 > t[last].l)
{
cur++;
t[cur].l = t[last].l;
t[cur].r = down - 1;
}
if(down + 1 < t[last].r)
{
cur++;
t[cur].l = down + 1;
t[cur].r = t[last].r;
}
}
}
int main()
{
int n;
while(cin >> n)
{
for(int i = 1;i <= n;i++)
cin >> a[i];
q_sort(a,1,n);
for(int i = 1;i <= n;i++)
cout << a[i] << " \n"[i == n];
}
return 0;
}
快速排序 O(nlogn)的更多相关文章
- 选择排序O(n^2)与快速排序O(nlogn)的优越性代码体现
随机函数生成一个超大数组: [code]: #include <iostream> #include <stdio.h> #include<time.h> #inc ...
- js算法-快速排序(Quicksort)
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出.在平均状况下,排序n个项目要O(nLogn)次比 ...
- swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序
import UIKit /// 冒泡 /// ///时O(n2),空O(1) 稳定排序 func Mysort(arr:[Int]) -> [Int]{ var transArr = arr ...
- 快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法
知乎上有一个问题是这样的: 堆排序是渐进最优的比较排序算法,达到了O(nlgn)这一下界,而快排有一定的可能性会产生最坏划分,时间复杂度可能为O(n^2),那为什么快排在实际使用中通常优于堆排序? 昨 ...
- 【Reading Note】算法读书杂记
1 排序 排序基本信息 稳定性:排序前大的数在排序后,大的数依然保持不变就是稳定排序,反之不稳定 内外排序:根据待排序的记录是否放在内存里面区分的.诸如:插入排序(直接插入&希尔).交换排序( ...
- JS实现常用排序算法—经典的轮子值得再造
关于排序算法的博客何止千千万了,也不多一个轮子,那我就斗胆粗制滥造个轮子吧!下面的排序算法未作说明默认是从小到大排序. 1.快速排序2.归并排序3.冒泡排序4.选择排序(简单选择排序)5.插入排序(直 ...
- js实现各种常用排序算法
1.冒泡排序 var bubbleSort = function (arr) { var flag = true; var len = arr.length; for (var i = 0; i &l ...
- 常用的 JS 排序算法整理
关于排序算法的问题可以在网上搜到一大堆,但是纯 JS 版比较零散,之前面试的时候特意整理了一遍,附带排序效率比较. //1.冒泡排序 var bubbleSort = function(arr) { ...
- 常用排序算法java实现
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
随机推荐
- Android 发送自定义广播(标准和本地)
1.首先自定义一个广播接收器:MyBroadcastReceiver package example.com.mybroadcastreceiver; import android.content.B ...
- php数据库单例模式理解
单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符 ...
- [经验总结] 在 windows 命令窗口中运行 python 脚本时提示 ModuleNotFoundError: No module named 'xxx'
先给出的代码和目录结构 获取CPU代码如下: # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: ''' import sys im ...
- <20190303>大厂的风度,firmware每年更新!
哪怕是最普通的型号, 思科Cisco 每隔一个周期都会推送一个新的firmware, 来提高 路由器的稳定性,和整体兼容性, 2015年买的路由器, 今年年初又发布一个更新包. Release Not ...
- rman restore spfile from backup
spfile一般在$ORACLE_HOME/dbs(linux)目录,如果你丢失了spfile并不会引起实例立刻停掉,你的实例可以继续操作,尽管当你restore spfile的时候需要关闭重启实例, ...
- 【Codeforces 1137C】Museums Tour
Codeforces 1137 C 题意:给一个有向图,一周有\(d\)天,每一个点在每一周的某些时刻会开放,现在可以在这个图上从\(1\)号点开始随意地走,问最多能走到多少个开放的点.一个点如果重复 ...
- 【Codeforces Round 1117】Educational Round 60
Codeforces Round 1117 这场比赛做了\(A\).\(B\).\(C\).\(D\).\(E\),\(div.2\)排名\(31\),加上\(div.1\)排名\(64\). 主要是 ...
- Unable to execute dex: Multiple dex files defineLcom/google/gson/JsonDeserializer;
这是异常想必大家都知道的,是关于一个android jar包冲突的问题.为什么还要提呢,是因为这玩意真心让人蛋疼.有些时候稍微不注意(手贱)多导入一个包,就完蛋了.(jar包多的话搞不好带一上午调试) ...
- 更换apt-get官方源为163源
更换apt-get官方源为163源 1.# mv /etc/apt/sources.list /etc/apt/sources.list.bak 2.覆盖原来源文件 tee /etc/apt/sour ...
- Python/Jupyter Notebook以及可视化的运用
最近陆陆续续使用Jupyter Notebook和Python可视化做了一些小工具,用于提高开发效率. 这里将其归类总结一下,作为学习的记录.