美文网首页
快速排序(Quicksort一)

快速排序(Quicksort一)

作者: sarafina527 | 来源:发表于2016-10-18 20:20 被阅读0次

快速排序是实践中最快的已知排序方法,平均性能在O(NlogN),最快在O(N^2)
基本算法是采用分治法
1.将数组根据枢纽或卫兵x,划分成两个子数组,前面的子数组的所有元素<=x,后面的>=x;
2.递归处理两个子数组,递归边界是有0个元素时;
3.合并,无意义,已经排好序了。


以下是最简单的快排实现

function quicksort (A,s,e) {
    if(s==undefined||e==undefined){
        s=0;
        e=A.length-1;
    }
    if(s<e){
        var pivot = partition(s,e);
        quicksort(A,0,pivot-1);
        quicksort(A,pivot+1,e);
    }
    return A;
  
    function partition(p,q){
        var x = A[p];
        var i = p;
        for(var j=p+1;j<=q;j++){
            if(A[j]<=x){
                i++;
                var temp = A[i];
                A[i] = A[j];
                A[j] = temp;
            }
        }
        A[p] = A[i];
        A[i] = x;
        return i;
    }
}
初始调用为quicksort([6,10,13,5,8,3,2,11],0,7)或quicksort([6,10,13,5,8,3,2,11])
#include <iostream>
#include <vector>
using namespace std;

int partition(int arr[],int p,int q){
    int x = arr[p];
    int i = p;
    for (int j = p+1; j <= q; ++j)
    {
        if(arr[j]<=x){
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    arr[p] = arr[i];
    arr[i] = x;
    return i;
}

void quicksort(int arr[],int p,int q){
    if(p<q){
        int piv = partition(arr,p,q);
        quicksort(arr,p,piv-1);
        quicksort(arr,piv+1,q);
    }
}
int partition2(int arr[],int p,int q){
    int x = arr[p];
    int i = p+1,j = q;
    while(i<j){
        while(arr[i]<=x){
            i++;
        }
        while(arr[j]>x){
            j--;
        }
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    arr[p] = arr[j];
    arr[j] = x;
}
void quicksort2(int arr[],int p,int q){
    if(p<q){
        int piv = partition2(arr,p,q);
        quicksort(arr,p,piv-1);
        quicksort(arr,piv+1,q);
    }
}

int main(int argc, char const *argv[])
{
    int arr[] = {6,10,13,5,8,3,2,11};
    // quicksort(arr,0,7);
    quicksort2(arr,0,7);
    for (int i = 0; i < 8; ++i)
    {
        cout<<arr[i]<<"\t";
    }
    return 0;
}

相关文章

  • JavaScript的排序算法——快速排序

    快速排序(Quicksort) 快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序...

  • PHP 实现快速排序

    导语 这篇了解下快速排序。 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-...

  • 2018-07-11快速排序

    快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)...

  • python实现快速排序

    快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),...

  • 排序与搜索——快速排序

    快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)...

  • 排序与搜索:快速排序

    快速排序 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),通过...

  • 算法导论学习002-快速排序

    快速排序 简介 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange so...

  • 算法分析与设计复习

    1、排序算法 QuickSort 快速排序 MergeSort 归并排序 HeapSort 堆排序 BubbleS...

  • 快速排序 O(nlogn)

    快速排序 调用方法 quickSort(a,0,n); θ(nlogn)

  • 数组-快速排序

    采用快速方式对数组进行排序 快速排序百科:快速排序(Quicksort)是对冒泡排序算法的一种改进.快速排序是通过...

网友评论

      本文标题:快速排序(Quicksort一)

      本文链接:https://www.haomeiwen.com/subject/zqututtx.html