zoukankan      html  css  js  c++  java
  • 排序方法汇总(二)快速排序

    快速排序使用了分治思想,分解为求 a(p..q-1)<a[q]<a(q+1) 的问题 + 分别递归a(p..q-1),a(q+1).

     1 #include <iostream>
     2 using std::cout;
     3 
     4 // a[p..q-1]<a[q]<a[q+1..r]的形式
     5 int partition(int *a,int p,int r)
     6 {
     7     //选a[r]为主元
     8     int x=a[r];
     9     int i=p-1,temp;
    10     for(int j=p;j<=r-1;j++)
    11     {
    12         //若a[j]小于主元,提到前面
    13         if(a[j]<x)
    14         {
    15             i++;
    16             if(i!=j)
    17             {temp=a[i];a[i]=a[j];a[j]=temp;}
    18         }
    19     }
    20     //将主元放到小的和大的中间,返回主元位置
    21     if(r!=i+1)
    22     {temp=a[r];a[r]=a[i+1];a[i+1]=temp;}
    23     return i+1;
    24 }
    25 void quicksort(int *a,int p,int r)
    26 {
    27     if(p<r)
    28     {
    29         //处理成 a[p..q-1]<a[q]<a[q+1..r]的形式
    30         int q=partition(a,p,r);
    31         //递归处理a[p..q-1],a[q+1..r]
    32         quicksort(a,p,q-1);
    33         quicksort(a,q+1,r);
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     int a[]={1,45,3,24,0,45};
    40     for(int i=0;i<6;i++)cout<<a[i]<<"  ";
    41     cout<<"
    ";
    42     quicksort(a,0,5);
    43     for(int i=0;i<6;i++)cout<<a[i]<<"  ";
    44     cout<<"
    ";
    45     return 0;
    46 }
  • 相关阅读:
    C
    数论::整除分块
    洛谷P1262 间谍网络
    洛谷P1649 【[USACO07OCT]障碍路线Obstacle Course】
    HDU2066dijkstra模板题
    Captain Flint and Treasure
    CodeForces
    CodeForces
    HDU-1827
    HDU 1811
  • 原文地址:https://www.cnblogs.com/backinfile/p/5827598.html
Copyright © 2011-2022 走看看