• 快速排序实例


    快速排序函数:

    /* quick_sort.h */
    
    #ifndef _QUICK_SORT_H
    #define _QUICK_SORT_H
    
    #define CUTOFF    (3)
    
    void quick_sort(int array[], int n);               //快速排序的驱动例程
    int median3(int array[], int left, int right);     //实现三数中值分割
    void qsort(int array[], int left, int right);      //快速排序主例程
    
    #endif
    /* quick_sort.c */
    
    #include "quick_sort.h"
    #include "common.h"
    #include "insertion_sort.h"
    
    void 
    quick_sort(int array[], int n)
    {
        qsort(array, 0, n - 1);
    }
    
    int 
    median3(int array[], int left, int right)
    {
        int center = (left + right) / 2;
    
        if(array[left] > array[center])
            swap(&array[left], &array[center]);
        if(array[left] > array[right])
            swap(&array[left], &array[right]);
        if(array[center] > array[right])
            swap(&array[center], &array[right]);
    
        swap(&array[center], &array[right -1]);
        return array[right - 1];
    }
    
    void 
    qsort(int array[], int left, int right)
    {
        int i, j;
        int pivot;
        
        if(left + CUTOFF <= right)
        {
            pivot = median3(array, left, right);
            i = left; j = right - 1;
            for(;;)
            {
                while(array[++i] < pivot){}
                while(array[--j] > pivot){}
                if(i < j)
                    swap(&array[i], &array[j]);
                else
                    break;
            }
            swap(&array[i], &array[right - 1]);
            qsort(array, left, i - 1);
            qsort(array, i + 1, right);
        }
        else
            insertion_sort(array + left, right - left + 1);
    }

    注:上面程序中,common.h参考:http://www.cnblogs.com/nufangrensheng/p/3665397.html;insertion_sort.h参考:http://www.cnblogs.com/nufangrensheng/p/3657887.html

    测试程序:

    /* quick_sort_test.c */
    
    #include "quick_sort.h"
    #include "common.h"
    #include <stdio.h>
    
    int
    main(void)
    {
        int array[] = {8, 1, 4, 9, 0, 3, 5, 2, 7, 6};
        
        printf("Before sorted : ");
        print_array(array, 10);
        printf("After sorted  : ");
        quick_sort(array, 10);
        print_array(array, 10);
        
        return 0;
    }

    Makefile:

    /* Makefile */
    
    target := test
    objs := quick_sort_test.o quick_sort.o common.o insertion_sort.o
    $(target):$(objs)
        gcc -o $@ $^
    %.o:%.c
        gcc -c -o $@ $<
    
    clean:
        rm *.o test

    测试结果:

    image

  • 相关阅读:
    动态库 DLL 封装二:dll封装方法
    动态库 DLL 封装一:dll分类
    C++读取配置文件ini
    WCHAR 字符串拼接
    关于web桌面应用的集成解决方案
    CSS Grid网格布局(转)
    使用 antd 的 form 组件来自定义提交的数据格式
    syslogd日志的一些作用
    我的三年感悟——避免无尽的自我内耗
    《被讨厌的勇气》读后感
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3669915.html
Copyright © 2020-2023  润新知