关闭

八大内部排序--快速排序

标签: 排序
489人阅读 评论(0) 收藏 举报
分类:

快速排序(qiuck sort):对冒泡排序的一种改进,通过一趟排序把记录分隔成两部分,其中一部分的关键字比另一部分都下,然后递归对这两部分进行快速排序。

时间复杂度:最坏O(n^2),平均O(nlogn),属于不稳定的排序。

代码如下:

#include <iostream>
using namespace std;

void print(int *a,int n){
    for(int i=0;i<n;i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
}

void qsort(int *a,int l,int r){
    if(l < r){
        int key_value = a[l];
        int left = l;
        int right = r;
        while(l<r){
            while(l<r && a[r]>=key_value) r--;
            a[l]=a[r];
            while(l<r && a[l]<=key_value) l++;
            a[r]=a[l];
        }
        a[l] = key_value;
        qsort(a,left,l-1);
        qsort(a,l+1,right);
    }
}

void quick_sort(int *a,int n){
    qsort(a,0,n-1);
}

int main()
{
    int *a;
    int n;

    cin>>n;
    a= new int[n+1];

    for(int i=0;i<n;i++){
        cin>>a[i];
    }

    quick_sort(a,n);
    print(a,n);
    return 0;
}


1
0
查看评论

js面试题之数组去重和快速排序

数组去重和快速排序这两个问题是在公司面试web前端常见的两个基础js问题,博主在阿里面试时就遇到过这个问题,现在我讲讲我知道的解决这两个问题的代码答案。 (ps:这两个题目都有好多种解决方案,大家可以先了解自己容易掌握的方法,然后再去网上找到最有效率的方法去了解其中的原理) 数组去重: ...
  • u012763269
  • u012763269
  • 2015-07-01 14:29
  • 2546

【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)

之所以把归并排序和快速排序放在一起探讨,很明显两者有一些相似之处:这两种排序算法都采用了分治的思想。下面来逐个分析其实现思想。 归并排序 实现思想 归并的含义很明显就是将两个或者两个以上的有序表组合成一个新的有序表。归并排序中一般所用到的是2-路归并排序,即将含有n个元素...
  • mmc_maodun
  • mmc_maodun
  • 2014-03-06 00:02
  • 7419

内部排序—快速排序

快速排序的基本思想是:通过一趟排序将待排序的记录划分成两个部分,其中一部分记录的关键字均不大于另一部分记录的关键字,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序。     用一维数组存储记录,一趟快速排序的具体做法是:设置两个指针i和j,他们的初始值分...
  • wdeng2011
  • wdeng2011
  • 2017-06-08 20:03
  • 71

数据结构——选择排序、插入排序、冒泡排序、快速排序

数据结构——选择排序、插入排序、冒泡排序、快速排序
  • amusi1994
  • amusi1994
  • 2016-12-18 13:37
  • 457

八大内部排序--希尔排序

希尔排序(shell sort):先将整个带排序记录序列分割成若干个子序列分别进行直接插入排序,待整个序列的记录‘基本有序’时,再对全体记录进行一次直接的插入排序。 时间复杂度:O(n^1.5)  属于插入排序的一种,是稳定的排序 代码如下: /***** shell-sort 希尔...
  • Szu_AKer
  • Szu_AKer
  • 2016-08-29 18:37
  • 320

八大内部排序之——冒泡排序

***  冒泡排序  最坏复杂度 O(n^2)   稳定排序 *** #include using namespace std; void print(int *a,int n){ for(int i=0;i<n;i++){ cout&...
  • Szu_AKer
  • Szu_AKer
  • 2016-08-21 22:02
  • 412

八大内部排序 -- 归并排序

归并排序(merge-sort):将两个或两个以上的有序列表组合成一个新的有序表,合并的m,n长度的两个表的复杂度为O(m+n),n个数的序列进行归并共有ceil(logn)次,每一次合并都是n常数级别的,所以总的复杂度为O(nlogn)。同时归并排序是一种稳定的排序。 代码如下,采用的是利用递归的...
  • Szu_AKer
  • Szu_AKer
  • 2016-08-31 23:49
  • 464

八大内部排序以及稳定性

稳定性的定义:如果队列中存在相等的两个数字,如果数字在排序过程中不发生变化,则是稳定的排序,如果发生了变化则是不稳定的排序。 交换排序:冒泡排序、快排排序。 冒泡思路:每次循环大的往下沉,每次循环循环的长度-1。 /* * 冒泡排序 交换排序顾名思义,假如某个位置的数据是确定的,寻找相应条件的...
  • jtracydy
  • jtracydy
  • 2016-08-15 15:16
  • 322

6、八大内部排序--Java代码

八大内部排序: 一、直接插入排序: /**  * 插入排序之直接插入排序  * @author baolibin  */ public class _04_insertSort { public static void main(String[] args...
  • baolibin528
  • baolibin528
  • 2016-08-25 22:57
  • 497

八大内部排序 -- 选择排序

选择排序:每一次在n-i+1(i=1,2,,,n-1)个记录中选取关键字最小的记录作为有序序列第i个记录。 复杂度为O(^2),不稳定的排序 代码如下: #include using namespace std; void print(int *a,int n){ for(int ...
  • Szu_AKer
  • Szu_AKer
  • 2016-08-30 18:42
  • 225
    个人资料
    • 访问:153958次
    • 积分:2217
    • 等级:
    • 排名:第19976名
    • 原创:101篇
    • 转载:5篇
    • 译文:0篇
    • 评论:34条
    最新评论