zoukankan      html  css  js  c++  java
  • 算法-QuickSort

      1 #include <stdlib.h>
      2 #include <iostream>
      3 #include <vector>
      4 
      5 using namespace std;
      6 
      7 template <class T>
      8 void print_array(const vector<T> &array)
      9 {
     10     for ( unsigned int i = 1; i < array.size() + 1; ++i )
     11     {
     12         cout<<array[i-1]<<" ";
     13         if ( array[i - 1] < 10 )
     14             cout<<" ";
     15         if ( i % 10 == 0 )
     16             cout<<endl;
     17     }
     18 }
     19 
     20 template <class T>
     21 void shuffling(vector<T> &array)
     22 {
     23     int n = array.size();
     24     for ( int i = 0; i < n; ++ i )
     25     {        
     26         int r = i == 0 ? 0 : rand() % i;
     27         T temp = array[i];
     28         array[i] = array[r];
     29         array[r] = temp;
     30     }
     31 
     32     return;
     33 }
     34 
     35 template <class T>
     36 unsigned int partition(vector<T> &array, unsigned int lo, int unsigned hi)
     37 {
     38     if ( lo == hi ) return lo;
     39 
     40     unsigned int i = lo;
     41     unsigned int j = hi;
     42     T partition_val = array[lo];
     43 
     44     while ( i < j )
     45     {
     46         while ( array[i] <= partition_val )
     47         {
     48             if ( i < hi ) ++i;
     49             else break;
     50         }
     51 
     52         while ( array[j] > partition_val )
     53         {
     54             if ( j > lo ) --j;
     55             else break;
     56         }
     57 
     58         if ( i < j )
     59         {
     60             T temp = array[i];
     61             array[i] = array[j];
     62             array[j] = temp;
     63         }
     64 
     65     }
     66 
     67     array[lo] = array[j];
     68     array[j] = partition_val;
     69 
     70     return j;
     71 }
     72 
     73 template <class T>
     74 void quick_sort(vector<T> &array, unsigned int  lo, unsigned int  hi)
     75 {
     76     if ( lo >= hi ) return;
     77     int partition_pos = partition(array, lo, hi);
     78     quick_sort(array, lo, partition_pos);
     79     quick_sort(array, partition_pos + 1, hi);
     80 
     81     return;
     82 }
     83 
     84 int main()
     85 {
     86     vector<int> array;
     87     for ( int i = 0; i < 20; ++i )
     88         array.push_back(i);
     89 
     90     cout<<"shuffling the array..."<<endl;
     91     shuffling(array);
     92 
     93     cout<<"the shuffled array: "<<endl;
     94     print_array(array);
     95 
     96     cout<<"quick sort the array: "<<endl;
     97     quick_sort(array, 0, array.size() - 1);
     98 
     99     cout<<"array after quick sorted: "<<endl;
    100     print_array(array);
    101 
    102     return 0;
    103 }

    输出结果:

  • 相关阅读:
    0909《操作系统教程》理解和认识
    1230《操作系统教程》实验四 主存空间的分配和回收模拟
    1203《操作系统教程》实验三 进程调度模拟程序 ——实验点评
    1203《操作系统教程》实验三 进程调度模拟程序
    1111《操作系统教程》实验二 作业调度模拟程序
    实验四 主存空间的分配和回收模拟
    实验三同学互评
    实验三 进程调度模拟程序
    实验二、作业调度模拟实验
    实验一报告
  • 原文地址:https://www.cnblogs.com/pbendan/p/4750031.html
Copyright © 2011-2022 走看看