欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常用算法

程序员文章站 2022-07-12 13:15:13
...
/**  
     * 选择排序 总比较次数:n*(n-1)/2 不稳定排序  
     *   
     * @param e  
     */  
    public void chooseSort(int[] e) {   
        int t;   
        for (int i = 0; i < e.length - 1; i++) {   
            for (int j = i + 1; j < e.length; j++) {   
                if (e[i] > e[j]) {   
                    t = e[i];   
                    e[i] = e[j];   
                    e[j] = t;   
                }   
            }   
        }   
    }   
  
    /**  
     * 直接插入排序 最少比较次数:n-1 ,最多比较次数:n*(n-1)/2 特点:原表顺序好排序效率高 稳定排序  
   *   
     * @param e  
     */  
    public void insertSort(int[] e) {   
        int j, t;   
        for (int i = 1; i < e.length; i++) {   
            for (t = e[i], j = i - 1; j >= 0 && t < e[j]; j--)// 依次后移   
            {   
                e[j + 1] = e[j];   
            }   
            e[j + 1] = t;// 插入   
        }   
    }   
  
    /**  
     * 冒泡排序 最多比较次数:n*(n-1)/2 稳定排序  
     *   
     * @param e  
     */  
    public void bubbleSort(int[] e) {   
        int t;   
        for (int i = 0; i < e.length - 1; i++) {   
            for (int j = 0; j < e.length - i - 1; j++) {   
                if (e[j] > e[j + 1]) {   
                    t = e[j];   
                    e[j] = e[j + 1];   
                    e[j + 1] = t;   
                }   
            }   
        }   
    }   
  
    /**  
     * 希尔排序 对直接插入排序的改进  
     *   
     * @param e  
     */  
    public void shellSort(int[] e) {   
        int j, y;   
        for (int h = e.length / 2; h > 0; h = h / 2) {   
            for (int i = h; i < e.length; i++) {   
                y = e[i];   
                for (j = i - h; j >= 0 && y < e[j]; j -= h) {   
                    e[j + h] = e[j];   
                }   
                e[j + h] = y;   
            }   
        }   
    }   
  
    /**  
     * 快速排序 对冒泡排序的改进  
     *   
     * @param e  
     * @param low  
     * @param high  
     */  
    public void quickSort(int[] e, int low, int high) {   
        if (low < high) {   
            int i = low, j = high, t = e[low];   
            while (i < j) {   
                // 在右子序列中找到比中间结点键值小或相等的结点,记录该结点下标于j   
                while (i < j && e[j] > t) {   
                    j--;   
                }   
                // 将该结点复制到左子序列   
                if (i < j) {   
                    e[i++] = e[j];   
                }   
                // 在左子序列中找到比中间结点键值大的结点,记录该结点下标于i   
                while (i < j && e[i] <= t) {   
                    i++;   
                }   
                // 将该结点复制到右子序列   
                if (i < j) {   
                    e[j--] = e[i];   
                }   
            }   
            e[i] = t;// 设置中间结点   
            quickSort(e, low, i - 1);// 划分左子序列   
            quickSort(e, i + 1, high);// 划分右子序列   
        }   
    }  

 

相关标签: 算法 J#

上一篇: 常用算法

下一篇: 常用算法