好像叫quickSort

刚开始学的时候就只会冒泡排序,后来会了C++库函数sort,就是没手写过quickSort。算算2014年也就剩下这么几天吧。不知道为啥今天就想写这个叫quickSort的东西。所以......

上代码:

#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

int middle(int *a,int left,int right){
    int an=a[left];    //以a[left]为分界点
    while(left<right){
        while(left<right&&a[right]>=an) right--; //从右往左找,一直找到比分界点 an 小的数,放到左边去
        a[left]=a[right];
        while(left<right&&a[left]<=an)  left++;  //从左往右找,一直找到比分界点 an 大的数,放到右边去
        a[right]=a[left];
    }
    a[left]=an;  //把分界点赋回给a[left]
    return left;
}

void quickSort(int *a,int left,int right){
    if(left<right){
        int mid=middle(a,left,right);
        quickSort(a,left,mid-1);
        quickSort(a,mid+1,right);
    }
}

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int a[100];
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        quickSort(a,0,n-1);
        for(int i=0;i<n;i++) printf("%d ",a[i]);
        printf("\n");
    }return 0;
}
时间: 2024-11-25 12:00:42

好像叫quickSort的相关文章

快速排序--QuickSort,看完五分彩开奖网平台搭建自己就能写出来的快排思路推演

快速五分彩开奖网平台搭建论坛:haozbbs.com Q1446595067排序(QuickSort)介绍首先发明者竟然敢给自己发明的算法叫做QuickSort,这个名字闪不闪亮?好比别的武功叫做六脉神剑.降龙十八掌,我这个叫做"天下无敌神功".别的排序算法都是按照特点来起的,你这个不是应该叫分块递归排序法吗?或者和希尔一样,叫做霍尔排序也可以啊,这么高调是要干啥啊?我给了他一次机会,特意去查了一下,这个名字并不是江湖朋友抬爱给的,就是发明者自己起的,社会社会...不过看完这篇博客,理

portainer,用于管理docker swarm,好像也不错哟

shipyard的模式,好像在docker 1.12之后,没有啥用武之地了,也没有更新. 接下来,集群管理和调度,最有知名度的就是rancher了. 在rancher之前,我们试一下portainer吧..超简单方便哟. 万一rancher不行,这个也可以上哈. 安装命令: docker service create > --name portainer > --publish 9000:9000 > --constraint 'node.role == manager' > --

数组去重算法,quickSort

function removeRepeat(arr) { var arr2 = [] ,obj = {}; for (var i = 0; i<arr.length; i++) { var num = arr[i]; //先把arr的第[i]num if( !obj[num] ){ //如果上面有个true,那么就不要push进数组,否则就push进数组 arr2.push(num); obj[num] = true; //不要忘记push到数组以后把obj上的属性设置为true,那么下次有一样

排序算法四:快速排序(Quicksort)

快速排序(Quicksort),因其排序之快而得名,虽然Ta的平均时间复杂度也是o(nlgn),但是从后续仿真结果看,TA要比归并排序和堆排序都要快. 快速排序也用到了分治思想. (一)算法实现 1 protected void quicksort(int[] array, int first, int last) { 2 3 int pivot = array[first]; 4 int i = first; 5 int j = last - 1; 6 boolean serachBig =

快速排序QuickSort

前几天实现了直接插入排序.冒泡排序和直接选择排序这三个基础排序.今天看了一下冒泡排序的改进算法,快速排序.单独记录一下,后面还有归并和基数排序等 快速排序 1.选择一个支点默认为数组第一个元素及array[start]作为支点,将所有大于支点元素的值放到支点后面,将所有小于支点元素的值放到支点前面,完成一次划分,返回支点的位置index 2.通过一个划分形成两个带排序的序列,[start, index - 1]和[index + 1, end]两个,在执行1直到序列元素只有1个则已经完成排序 具

快速排序(quicksort)

快速排序是对冒泡排序算法的一种改进型算法,而且快速排序也采用了分治法的思想.快速排序是不稳定排序, 平均时间复杂度为:O(n*logn),最坏时间复杂度为:O(n*n),空间时间复杂度:O(logn),但快速排序通常是用于排 序的最佳实用的选择. 快速排序的思想:从数组选取一个数(通常是第一个数)作为标准,从数组的高位开始查找,找到比作为标准数小的数 ,然后进行交换,又从数组的低位开始查找,找到比作为标准大的数,然后进行交换,重复以上步骤,直至从高位到低位, 低位到高位重合为止. 示例: 6  

我们好像在哪见过

我们好像在哪儿见过 你记得吗 好像那是一个春天 我刚发芽 我走过 没有回头 我记得 我快忘了 我们好像在哪儿见过 你记得吗 记得那是一个夏天 盛开如花 我唱歌 没有对我 但我记得 可我快忘了 我们好像在哪儿见过 你记得吗 好像那是一个秋天 夕阳西下 你美得让我不敢和你说话 你经过我时风起浮动我的发 你记得吗 记得那是一个冬天 漫天雪花 我走过 没有回头 我记得 我快忘了 我们好像在哪儿见过 你记得吗 那时你还是个孩子 我在窗棂下 我猜着你的名字刻在了墙上 我画了你的模样对着弯月亮 你记得吗 当我

排序--QuickSort 快排

Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素,所有这个元素右边的元素都大于这个元素.接着再把左右2个数组分别排序. 假设你有如下数组 (所有 i  左边的对象都小于 切分对象. 所有 j  右边的对象都大于切分对象 这句话稍后有用 先知道一下) 首先,我们把index = 0 的元素当作切分元素. 从index = 1 的位置开始,找到第一个

quicksort(java版)

相信大家都知道几种排序算法,比如说冒泡排序,选择排序,插入排序等等,这些个算法都不是很难,自己多多理解理解就能掌握了,而今天我们要谈的就是重头戏就是快速排序. 引用大牛的思想来对排序算法解释一下.(文章链接:http://bubkoo.com/2014/01/12/sort-algorithm/quick-sort/#参考文章) 快速排序是图灵奖得主C. R. A. Hoare 于 1960 年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-Conquer