zoukankan      html  css  js  c++  java
  • 基础算法之排序--快速排序

      1         /************************************************************************************** 
      2         * Function     : 快速排序 
      3         * Create Date  : 2014/04/21 
      4         * Author       : NTSK13 
      5         * Email        : beijiwei@qq.com 
      6         * Copyright    : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 
      7         *                任何单位和个人不经本人允许不得用于商业用途 
      8         * Version      : V0.1                     
      9         ***************************************************************************************                     
     10         基础算法之排序--快速排序   3 1 7 5 8 4 9 0 2 6 
     11          
     12         步骤: 
     13         1)选取base 为最左边的3,最小序号为0(left=0),最大序号为9(right=9) 
     14          
     15         2)从最右边开始,向左查找到第一个小于base的数字,序列号为j,放在序号为0的位置,也就是取得base值的位置. 
     16         3)从最左边开始,向右查找到第一个大于base的数字序列号为i,放在上次查找小于base的位置,序列号j 
     17          
     18         4)循环执行  步骤2) 和 步骤  3) ,直到 i >= j. 此时序列号i的左侧全是小于base的数,  序列号i的右侧全是大于base的数, 
     19          
     20         5)把base值放在序列号为i的位置 
     21          
     22         6)分别递归调用left到 i-1, i+1到 right 进行快排 
     23          
     24         注意  left小于right 是可以进行递归的条件. 
     25          
     26         **************************************************************************************/    
     27         #include<stdio.h>    
     28                       
     29         #define MY_FUNC  1  
     30         #if MY_FUNC    
     31           
     32         #define M 10  
     33         int data[M]={0};  
     34           
     35         void quick_sort(int array[],int left,int right);  
     36           
     37         // The first method:  
     38         int main()    
     39         {    
     40             int i=0;  
     41           
     42             freopen("input.txt","r",stdin);  
     43           
     44             for(i=0;i<M;i++)  
     45                 scanf("%d",&data[i]);  // get input data  
     46                      
     47             printf("Before quick sort : 
    ");  
     48             fflush(stdout);  
     49           
     50              for(i=0;i<M;i++) {  
     51                  printf("%d 	",data[i]);  
     52                  fflush(stdout);  
     53              }  
     54           
     55             quick_sort(data,0,M-1);  
     56           
     57             printf("
    After quick sort : 
    ");  
     58             fflush(stdout);  
     59           
     60             for(i=0;i<M;i++) {  
     61                 printf("%d 	",data[i]);  
     62                 fflush(stdout);  
     63              }  
     64           
     65             return (0);  
     66         }    
     67           
     68         void quick_sort(int array[],int left,int right)  
     69         {  
     70             int base=array[left];//选定base  
     71             int i=left;//左侧序号  
     72             int j=right;//右侧序号  
     73           
     74             if(left < right)  
     75             {  
     76                 while(i<j)  
     77                 {  
     78                     //注意下边while循环里 i<j是必须加入的  
     79                     while(i<j && array[j]>base)//right --> left 从数组最右侧 开始往左找比base小的数; 如果找到的话,放在最左边  
     80                         j--;  
     81                     array[i]=array[j];  
     82           
     83                     //注意下边while循环里 i<j是必须加入的  
     84                     while(i<j && array[i]<base)//left -->right 从数组最左侧 开始往 找比base大的数; 如果找到的话,放在最右边  
     85                         i++;  
     86                     array[j]=array[i];  
     87                 }  
     88                 array[i]=base;  
     89           
     90                 quick_sort(array,left,i-1);  
     91                 quick_sort(array,i+1,right);  
     92             }  
     93           
     94         }  
     95               
     96         /********************************************my function end**************************************************/    
     97         #else    
     98           
     99         #define M 10  
    100         int data[M]={0};  
    101           
    102         int division(int a[],int left,int right);  
    103         void quick_sort(int a[],int left,int right);  
    104           
    105         // The second method:      
    106         int main()    
    107         {  
    108             int i=0;  
    109           
    110             freopen("input.txt","r",stdin);  
    111           
    112             for(i=0;i<M;i++)  
    113                 scanf("%d",&data[i]);  // get input data  
    114           
    115             printf("Before quick sort : 
    ");  
    116             fflush(stdout);  
    117           
    118              for(i=0;i<M;i++) {  
    119                  printf("%d 	",data[i]);  
    120                  fflush(stdout);  
    121              }  
    122           
    123             quick_sort(data,0,M-1);  
    124           
    125             printf("
    After quick sort : 
    ");  
    126             fflush(stdout);  
    127           
    128             for(i=0;i<M;i++) {  
    129                 printf("%d 	",data[i]);  
    130                 fflush(stdout);  
    131              }  
    132           
    133           
    134             return (0);  
    135         }  
    136            
    137           
    138         int division(int a[],int left,int right)  
    139         {  
    140             int base=a[left];  
    141             while(left<right)  
    142             {  
    143                 while(left<right && a[right]>base)  
    144                     --right;  
    145                 a[left]=a[right];  
    146                 while(left<right && a[left]<base)  
    147                     ++left;  
    148                 a[right]=a[left];  
    149             }  
    150             a[left]=base;  
    151             return left;  
    152           
    153         }  
    154         void quick_sort(int a[],int left,int right)  
    155         {  
    156             int i=0;  
    157             if(left<right)  
    158             {  
    159                 i=division(a,left,right);  
    160                 quick_sort(a,left,i-1);  
    161                 quick_sort(a,i+1,right);  
    162             }  
    163         }  
    164           
    165         #endif   
    166 
    167  
  • 相关阅读:
    发布SpringBoot项目到Docker容器
    Docker网络
    Docker镜像发布到阿里云
    Docker制作Tomcat镜像
    DockerFile指令
    Docker命令
    kafka安装与使用
    刷题第2天
    刷题第1天
    UVA 11107 Life Forms
  • 原文地址:https://www.cnblogs.com/ntsk13/p/3701300.html
Copyright © 2011-2022 走看看