码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2016-08-12 21:24:52      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

介绍

通过一趟排序将要排序的数据分割为独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。

过程

1.设置两个变量i、j,排序开始时:i=0,j=n-1;

2.以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3.从j开始向前搜索(j--),找到第一个小于key的值A[j],将他赋值给A[i];(直接覆盖即可,因为在上一步,被覆盖的值已经存到了合适的地方)

4.从i开始向后搜索(i++),找到第一个大于key的值A[i],将他赋给A[j];

5.重复第3、4两步,直到i=j;

6.将k赋给A[i]。

 

代码

#include<iostream>
using namespace std;


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

int partition(int a[],int low,int high){
    int k = a[low];//基准元素
    while (low < high){
        while (a[high] >= k && low < high)
            --high;
        a[low] = a[high];
        while (a[low] <= k && low<high)
            ++low;
        a[high] = a[low];
    }
    a[low] = k;
    print(a, 10);
    return low;
}

void quikSort(int a[], int low, int high){
    if(low < high){
        int privotLoc = partition(a, low, high);
        quikSort(a, low, privotLoc - 1);
        quikSort(a, privotLoc + 1, high);
    }
}

int main(){
    int a[10] = { 3, 1, 5, 7, 2, 4, 11, 32, 5, 6 };
    quikSort(a, 0, 9);
    for (int i = 0; i < 10; i++){
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}

效果

技术分享

算法分析

时间复杂度:最坏O(n*n) 平均O(n*log(n))

空间复杂度: O(log(n))

 

快速排序

标签:

原文地址:http://www.cnblogs.com/bluebean/p/5766222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!