• 快速排序


    2019-04-24   23:20:39

    八大排序算法

    今天才发现了有插入代码这个选项,以后可以更方便啦;水平线则个选择不知道怎么删除.....

    排序算法:内部排序  外部排序 



     内部排序:插入排序(直接插入排序 希尔排序)  选择排序(简单选择排序 堆排序)  交换排序(冒泡排序 快速排序) 归并排序    基数排序



     外部排序

     1   int n;
     2  void quicksort(int* a, int p,int r)
     3  {
     4      int i = p;
     5      int j = r;
     6      int temp = a[p];    
     7     
     8     while(i < j)    {
     9          // 越过不小于基准值的数据 
    10         while( a[j] >= temp && j > i ) j--;
    11          
    12          if( j > i )
    13         {
    14              a[i] = a[j];
    15              i++;
    16              
    17              // 越过小于基准值的数据 
    18              while(a[i] <= temp && i < j )  i++;
    19             if( i < j )
    20              {
    21                a[j] = a[i];
    22                  j--;
    23              }
    24          }        
    25      }
    26      a[i] = temp; 
    27      
    28      for(int k = p; k <= r;k++)
    29     {
    30          if( k == i ) 
    31          {
    32             printf("(%d) ",a[k]);
    33              continue;
    34         }
    35         printf("%d ",a[k]);
    36     } 
    37     printf("
    ");
    38      
    39      if( p < (i-1)) quicksort(a,p,i-1);
    40      if((j+1) < r ) quicksort(a,j+1,r);    
    41  }
    42  
    43  int main(int argc, char* argv[])
    44  {
    45      int a[ n];
    46      int n;    
    47  
    48      printf("Input total numbers: ");
    49      scanf("%d",&n);
    50  
    51      
    52      for(int i = 0; i < n;i++)
    53      {
    54          scanf("%d",&a[i]);
    55      }
    56     
    57      printf("Divide sequence:
    ");
    58      quicksort(a,0,n-1);
    59      
    60      printf("The sorted result:
    ");
    61      for(int i = 0; i < n;i++)
    62      {
    63         printf("%d ",a[i]);
    64     } 
    65      printf("
    ");
    66         
    67      
    68      return 0;
    69  } 

    #define MAX_NUM 80     //先定义数组长度,后续使用不完,容易造成空间浪费
     
     void quicksort(int* a, int p,int r)      //快速排序算法
     {
         int i = p;
         int j = r;
        int temp = a[p];        //将第一位数作为基准
       
        while(i < j)    {
             // 越过不小于基准值的数据
            while( a[j] >= temp && j > i )

             j--;
            
             if( j > i )
            {
                 a[i] = a[j];                      //交换数组的内容,将较小值换在左边
                 i++;
                
                 // 越过小于基准值的数据
                 while(a[i] <= temp && i < j ) 

                  i++;
                if( i < j )
                 {
                   a[j] = a[i];
                     j--;
                 }
             }       
         }
         a[i] = temp;
        
         for(int k = p; k <= q;k++)
        {
             if( k == i )
             {
                printf("(%d) ",a[k]);
                 continue;
            }
            printf("%d ",a[k]);
        }
        printf(" ");
        
         if( p < (i-1)) quicksort(a,p,i-1);
         if((j+1) < q ) quicksort(a,j+1,q);   
     }
     
     int main(int argc, char* argv[])
     {
         int a[MAX_NUM];
         int n;   
     
         printf("Input total numbers: ");
         scanf("%d",&n);
     
         if( n > MAX_NUM )
      n = MAX_NUM;
       
         for(int i = 0; i < n;i++)
         {
             scanf("%d",&a[i]);
         }
       
         printf("Divide sequence: ");
         quicksort(a,0,n-1);
        
         printf("The sorted result: ");
         for(int i = 0; i < n;i++)
         {
            printf("%d ",a[i]);
        }
         printf(" ");
           
        
         return 0;
     }

    2019-04-27   17:48:38

    请教版本,算法基本理解,但是不足之处是并没有输出每一次划分的数组,后续会改进了继续更新。

    #include<stdio.h>
    void quick_sort(int *arr,int start,int end);
    int partition(int *arr,int start,int end);
    
    int main(){
        int n;
        int arr[n];
        int i=0;
        printf("please input number: ");
        scanf("%d",&n);
        for(i=0;i<=n-1;i++){
        scanf(" %d",&arr[i]);
    }
           
        quick_sort(arr,0,n-1);
        for(int i=0;i<n;i++){
        printf(" %d",arr[i]); 
     }
    }
    void quick_sort(int *arr,int start,int end){
        if(start<end){
            int p=partition(arr,start,end);
            
            quick_sort(arr,start,p-1);
            quick_sort(arr,p+1,end);
             
        }
    }
    int partition(int *arr,int start,int end){
        int n;
        int i=start;
        int j=end+1;
        int x=arr[start];
        
        while(1){
            while(arr[++i]<x && i<end);
            while(arr[--j]>x);
            if(i>=j){
            break;
        }
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        arr[start]=arr[j];
        arr[j]=x;
        return j;
    
    }
    #include<stdio.h>
    void quick_sort(int *arr,int start,int end);   // 声明两个函数
    int partition(int *arr,int start,int end);      //int *arr相当于int arr[]
    /*主函数定义数组长度,先输入想要排序的数组长度,再一次我输入数组的值,调用quick_sort算法,进行排序。*/
    int main(){
     int n;
     int arr[n];
     int i=0;
     printf("please input number: ");
     scanf("%d",&n);
     for(i=0;i<=n-1;i++){
     scanf(" %d",&arr[i]);
    }
       
        quick_sort(arr,0,n-1);
     for(int i=0;i<n;i++){
     printf(" %d",arr[i]);
     }
    }
    void quick_sort(int *arr,int start,int end){
     if(start<end){
      int p=partition(arr,start,end);
      
      quick_sort(arr,start,p-1);
      quick_sort(arr,p+1,end);
      
     }
    }
    int partition(int *arr,int start,int end){
     int i=start;
     int j=end+1;
     int x=arr[start];        //定义初始值start为第一次划分的基准
     
     while(1){
      while(arr[++i]<x && i<end);
      while(arr[--j]>x);
      if(i>=j){       当i与j指向同一元素或者i在j右边时,跳出循环。
      break;
     }
      int temp=arr[i];      //若没有跳出循环,找比基准值大i对应的数值与比基准值小j对应的数值,交换a[i]与a[j]的值,
      arr[i]=arr[j];
      arr[j]=temp;
     }
     arr[start]=arr[j];         //将j对应的数值作为新的基准值,再次比较。
     arr[j]=x;                    //将基准值放在j的位置
     return j;
    }
  • 相关阅读:
    K3Cloud 解决方案版本号问题
    K3Cloud 通过元数据查询单据信息
    K3Cloud 设置分录的字段颜色
    K3Cloud 干预标准产品插件
    K3Cloud 根据单据ID 获取单据视图和数据包
    K3Cloud 后台修改账户密码策略
    K3Cloud 选择基础资料允许显示未审核数据
    K3Cloud 根据内码和基础资料元数据获取基础资料数据包
    按照应用场景划分安全测试
    常见业务场景的安全测试及安全开发
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/10765706.html
Copyright © 2020-2023  润新知