zoukankan      html  css  js  c++  java
  • 排序

    仅仅先复习简单的排序

     函数原型

    //直接插入排序
    //a[0]作为监视哨
    void Dir_Insert(data_t a[],int N) 
    {
        int i, j;
        for (i = 2; i < N; i++) {
            a[0] = a[i];
            j = i - 1;
            while (a[j] > a[0]) {
                a[j + 1] = a[j];
                j--;
            }
            a[j + 1] = a[0];
        }
    }
    
    //折半插入排序
    void Binsort(data_t a[], int N)
    {
        int i, j, low, high, mid;
        for (i=2; i<N; i++) {
            a[0] = a[i];
            low = 1;
            high = i;
            while (low <= high) {
                mid = (low + high) / 2;
                if (a[0] >= a[mid]) {
                    low = mid + 1;
                } else {
                    high = mid - 1;
                }
            }
            for (j=i-1; j>=low; j--) {
                a[j + 1] = a[j];
            }
            a[low] = a[0];
        }
    }
    
    //冒泡排序
    void Bubsort(data_t a[], int N)
    {
        int i, j, tmp;
        for (i = 0; i < N - 1; i++) {
            for (j = 0; j < N - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    a[j] ^= a[j + 1];
                    a[j + 1] ^= a[j];
                    a[j] ^= a[j + 1];
                }
            }
        }
    }
    
    //快速排序
    void qksort(data_t a[], int left, int right)
    {
        if (left >= right) {
            return;
        }
        int i = left;
        int j = right;
        data_t key = a[left];
        while (i < j) {
            while (i<j && key<=a[j]) {
                j--;
            }
            a[i] = a[j];
            while (i<j && key>=a[i]) {
                i++;
            }
            a[j] = a[i];
        }
        a[i] = key;
        qksort(a, left, i - 1);
        qksort(a, i + 1, right);
        
        return;
    }

    测试代码

    void show(data_t a[], int left, int right)
    {
        int i;
        for (i = left; i < right; i++) {
            printf("%d ", a[i]);
        }
        printf("
    ");
    }
    
    int main(int argc, char *argv[])
    {    
        data_t a[11] = {0,9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        Dir_Insert(a, 11);
        show(a, 1, 11);
        
        data_t b[11] = {0,9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        Binsort(b, 11);
        show(b, 1, 11);
        
        data_t c[11] = {0,9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        Bubsort(c, 11);
        show(c, 1, 11);
        
        data_t d[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        qksort(d, 0, 9);
        show(d, 0, 10);
        
        
        return 0;
        
    }

    结果

    0 1 2 3 4 5 6 7 8 9 
    0 1 2 3 4 5 6 7 8 9 
    0 1 2 3 4 5 6 7 8 9 
    0 1 2 3 4 5 6 7 8 9
  • 相关阅读:
    ElasticSearch(二) Transport Client Connection By Domain
    ElasticSearch(一) Transport Client
    如何把Spring Boot打包成war
    Lucene Query种类
    JAVA Http Basic auth
    Java 多线程系列2——多线程的生命周期及生产消费者模型
    Java 多线程系列1——浅聊JAVA 线程池的一般用法
    JS 实现右下角弹窗
    JS 实现兼容IE图片向左或向右翻转
    Vue Input输入框两侧加减框内数字组件
  • 原文地址:https://www.cnblogs.com/vsyf/p/4992967.html
Copyright © 2011-2022 走看看