zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序时间复杂度为O(nlogn),由于是在原数组上面利用替换来实现,因此不需要额外的存储空间。

    算法思想:

      通过设置一个岗哨,每次跟这个岗哨进行比较,比他小的放在左边,比他大的放在右边。再对岗哨左边的数组0----middle-1,和middle+1-----end,进行同样的排序。

    主要代码:

    void QuikSort(int *arr,int begin,int end){
       int middle;
       if(begin < end){
           middle = Patition(arr,begin,end);
    
           QuikSort(arr,0,middle-1);
           QuikSort(arr,middle+1,end);
       }
    }
    int Patition(int * arr,int begin,int end){
        int middle  = arr[begin];
        int tmp;
        while(begin < end){
            while(begin < end && arr[end] >= middle)
                end--;
            
                tmp = arr[end];
                arr[end] = arr[begin];
                arr[begin] = tmp;
            
            while(begin<end && arr[begin] <= middle)
                begin++;
            
                tmp = arr[end];
                arr[end] = arr[begin];
                arr[begin] = tmp;
            
        }
        return begin;
    }

    全部代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int arrtest1[10] = {4,3,7,8,0,9,1,2,6,5};
    int arrtest2[10] = {0,1,2,3,4,5,6,7,8,9};
    int arrtest3[10] = {9,8,7,6,5,4,3,2,1,0};
    void copy(int *from,int *arr,int length);
    void print(int *arr,int length);
    void QuikSort(int *arr,int begin,int length);
    int Patition(int * arr,int begin,int end);
    int main(){
        int Arr[10],i;
        copy(arrtest1,Arr,10);
        print(Arr,10);
        QuikSort(Arr,0,9);
        print(Arr,10);
        getchar();
        return 0;
    }
    void QuikSort(int *arr,int begin,int end){
       int middle;
       if(begin < end){
           middle = Patition(arr,begin,end);
    
           QuikSort(arr,0,middle-1);
           QuikSort(arr,middle+1,end);
       }
    }
    int Patition(int * arr,int begin,int end){
        int middle  = arr[begin];
        int tmp;
        while(begin < end){
            while(begin < end && arr[end] >= middle)
                end--;
            
                tmp = arr[end];
                arr[end] = arr[begin];
                arr[begin] = tmp;
            
            while(begin<end && arr[begin] <= middle)
                begin++;
            
                tmp = arr[end];
                arr[end] = arr[begin];
                arr[begin] = tmp;
            
        }
        return begin;
    }
    void copy(int *from,int *arr,int length){
        int i;
        for(i=0;i<length;i++){
            arr[i] = from[i];
        }
    }
    
    void print(int *arr,int length){
        int i;
        for(i=0;i<length;i++){
            printf("%d ",arr[i]);
        }
        printf("
    ");
    }

    运行实例:

  • 相关阅读:
    实现发送邮件
    c#操作sqlite(包含中文支持)
    C# & SQLite
    卸载impala
    kudu集成impala
    Kudu的卸载(cdh)
    Kudu的集群安装(1.6.0-cdh5.14.0)
    ELK日志平台搭建
    logstash之OutPut插件
    logstash之Filter插件
  • 原文地址:https://www.cnblogs.com/xing901022/p/3678409.html
Copyright © 2011-2022 走看看