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

    把数组的第一个数据作为比较的原点,比该数据小的数据排列在左边,比该数据大的数据排列在右边

    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    #include <malloc.h>

    void swap(int *a, int *b)
    {
        int c;
        c = *a;
        *a = *b;
        *b = c;
    }

    void _quick_sort(int array[], int start, int end)
    {
        int middle;
        if(start > end)
            return;
        middle = get_middle1(array, start, end);
        //middle = get_middle2(array, start, end);
        _quick_sort(array, start, middle - 1);
        _quick_sort(array, middle + 1, end);
    }

    int get_middle1(int array[], int start, int end)
    {    
        int middle;
        int change = array[start];
        int loop = start + 1, head = 0, tail = end - start;
        //int j = end;
        int *p = malloc(sizeof(int) * (end - start + 1));
        while(loop <= end)
        {
            if(array[loop] < change)
            {
                p[head] = array[loop];
                head ++;
            }
            if(array[loop] > change)
            {
                p[tail] = array[loop];
                tail --;
            }
            loop ++;
        }
        p[head] = change;
        memmove(array + start, p, sizeof(int) * (end - start + 1));
        return start + head;
    }

    int get_middle2(int array[], int start, int end)
    {    
        int middle;
        int change = array[start];
        int i = start;
        int j = end;
        while(i < j)
        {
            while(i < j && array[j] >= change)
                j --;
            if(i < j)
            {
                array[i] = array[j];
                i ++;
            }
            while(i < j && array[i] <= change)
                i ++;
            if(i < j)
            {
                array[j] = array[i];
                j --;
            }
        }
        array[j] = change;
        return j;
    }

    void quick_sort(int array[], int length)
    {
        assert(NULL != array || 0 != length);
        _quick_sort(array, 0, length -1);
    }

    void test()
    {
        int i;
        int array[10] = {1,3,4,5,8,6,7,9,0,2};
        quick_sort(array, 10);
        for(i = 0; i < 10; i ++)
        {
            printf("%d, ", array[i]);
        }
        printf(" ");
    }

    int main()
    {
        test();
    }

  • 相关阅读:
    centos7下redis6的安装
    Centos MySQL 5.7安装、升级教程
    Python之SSH-paramiko模块的使用
    Linux进程管理工具之Supervisor的使用
    Python-RPC框架之-ZeroRPC和SimpleXMLRPCServer
    Django入门--简单的form验证
    redis常用指令
    MySQL自增主键ID重新排序
    批量微博删除脚本
    解决springboot2.x集成redis节点故障redisTemplate报错redis Command timed out
  • 原文地址:https://www.cnblogs.com/chengxuyuandashu/p/3572800.html
Copyright © 2011-2022 走看看