歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

【算法導論】C++實現的隨機化的快速排序

C++實現的隨機化的快速排序:

  1. #include <iostream>  
  2. #include <set>  
  3. #include <string>  
  4. void swap(int * a,int * b); 
  5. int partition(int * array_list,int left,int right); 
  6. void Print(); 
  7. int random_partition(int * array_list,int left,int right); 
  8. void random_quick_sort(int * array_list,int left,int right); 
  9. const int size = 100; 
  10. //int array_list [] ={2,8,7,1,3,5,6,4};  
  11. int * array_list; 
  12. int main() 
  13.     //const int size = 10;  
  14.     array_list = new int [sizeof(int)*size]; 
  15.     srand(0); 
  16.     for(int i=0;i<size;i++) 
  17.     {/*隨即的填充數組元素*/ 
  18.         int ran_num=rand()% size; 
  19.         array_list[i] = ran_num; 
  20.     } 
  21.     random_quick_sort(array_list,0,size - 1); 
  22.     Print(); 
  23.     return 0; 
  24.  
  25. void random_quick_sort(int * array_list,int left,int right) 
  26.     if(left >= right) 
  27.     { 
  28.         return ; 
  29.     } 
  30.     int index = random_partition(array_list,left,right); 
  31.     random_quick_sort(array_list,left,index - 1); 
  32.     random_quick_sort(array_list,index + 1,right); 
  33. /*隨機化的快速排序對於輸入的元素加入隨機化的成分,使之獲得較好的平均性能*/ 
  34. int random_partition(int * array_list,int left,int right) 
  35.     srand(left); 
  36.     int ran_num=( rand())% right; 
  37.     if((ran_num < left )) 
  38.     {/*防止出現因為取模後隨機數為0的情況*/ 
  39.         ran_num = left; 
  40.     } 
  41.     /*如果,不交換排序區間內的數據,則成為普通的快速排序*/ 
  42.     swap(&array_list[right],&array_list[ran_num]); 
  43.     return partition(array_list,left,right); 
  44. int partition(int * array_list,int left,int right) 
  45.     int index = left; 
  46.     int pivot = array_list[right]; 
  47.     for(int i= left ; i< right; i++) 
  48.     { 
  49.         if(array_list[i] < pivot) 
  50.         { 
  51.             swap(&array_list[index],&array_list[i]); 
  52.             index ++; 
  53.         } 
  54.     } 
  55.     swap(&array_list[right],&array_list[index]); 
  56.     //Print();  
  57.     return index; 
  58. void swap(int * a,int * b) 
  59.     int  tmp = *a; 
  60.     *a = *b; 
  61.     *b = tmp; 
  62. void Print() 
  63.     for(int i=0;i< size;i++) 
  64.     { 
  65.         std::cout<<array_list[i]<<"\t"; 
  66.     } 
  67.     std::cout<<std::endl; 
Copyright © Linux教程網 All Rights Reserved