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

    排序是最基础也是重要的一种排序,在C语言中,排序有很多种:冒泡排序、选择排序、

    桶排序、快速排序等等,其中一般不经过优化的排序算法时间复杂度为O(n^2),或者空

    将复杂度比较夸张,其中快速排序是经过优化的一种算法,一般数据的复杂度为O(nlogn)

    快排思想:首先是一段数据例如:8 9 5 1 3 2 7 4 以第一个数为基准数,将比8大的数放在8的右边,

    比8小的放在左边,最后将8放在它应放的位置:7 4 5 1 3 2 8 9 这是第一次交换后的结果,然后在

    进行递归调用,调用自身,分别进行处理8左边数据和右边数据。

    代码如下:

    #include<stdio.h>//与桶排序相比既节省空间,又节约时间。
    int a[101],n;//定义全局变量,主函数,子函数都要用到。 全局变量默认为零
    void quicksort(int left,int right)
    {
     int i,j,t,temp;
     if(left>right)//防止递归无限调用
     return ;
     temp=a[left];//找到基准数。
     i=left;
     j=right;
     while(i!=j)//当i==j时遍历完成
     {
      while(a[j]>=temp&&i<j)//顺序很重要,先从右边找起。
      j--;
      while(a[i]<=temp&&i<j)
      i++;
      if(i<j)//交换位置。 //一定要有这个判断语句,不然会一直循环
      {
       t=a[i];
       a[i]=a[j];
       a[j]=t;
      }
     }
     a[left]=a[i];//基准数归位;
     a[i]=temp;
     quicksort(left,i-1);//递归调用,左边数排序。
     quicksort(i+1,right);//递归调用,右边数排序。
     return ;
    }
    int main()
    {
     int i,j;
     scanf("%d",&n);
     for(i=1;i<=n;i++)
     scanf("%d",&a[i]);
     quicksort(1,n);
     for(i=1;i<=n;i++)
     printf("%d ",a[i]);
     return 0;
    }

  • 相关阅读:
    docker 部署 禅道系统
    docker 部署 jenkins
    运筹方法
    软件工程基础知识
    操作系统知识
    程序设计语言基础知识
    计算机组成与配置
    oracle触发器
    性能测试监控工具的使用
    数据库设计范式
  • 原文地址:https://www.cnblogs.com/cong12586/p/10560951.html
Copyright © 2011-2022 走看看