zoukankan      html  css  js  c++  java
  • 快速排序

    #include<stdio.h>

    int partition(int a[],int left,int right)
    {
    int i=left;
    int j=right;
    int temp=a[i];
    while(i<j)
    {
    while(i<j && a[j]>=temp)
    j--;
    if(i<j)
    a[i]=a[j];
    while(i<j && a[i]<=temp)
    i++;
    if(i<j)
    a[j]=a[i];
    }
    a[i]=temp;
    return i;
    }
    void quickSort(int a[],int left,int right)
    {
    int dp;
    if(left<right)
    {
    dp=partition(a,left,right);
    quickSort(a,left,dp-1);
    quickSort(a,dp+1,right);
    }
    }

    int main()
    {
    int a[9]={5,4,9,1,7,6,2,3,8};
    quickSort(a,0,8);
    for(int i=0;i<9;i++)
    {
    printf("%d ",a[i]);
    }
    return 0;
    }

    时间复杂度:O(n*lgn)
    最坏:O(n^2)
    空间复杂度:O(n*lgn)
    不稳定。

    快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。
    通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)。

  • 相关阅读:
    POJ 2112 二分+最大流
    POJ 3281 最大流
    枚举------暴力与优化
    动态规划入门
    简单二叉树
    花式WA
    18年第十二届东北四省赛
    18年第十三届黑龙江省赛
    ACM中的java的使用;
    CF#483(div2 C)
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3751619.html
Copyright © 2011-2022 走看看