码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序,希尔排序,堆排序,归并排序,快速排序Java实现

时间:2014-06-18 16:08:33      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   ext   

参看:数据结构与算法分析-c语言描述

public class Main {

    public static void main(String[] args) {
        String[] a = { "a", "d", "e", "f", "m" };
        String[] b = { "a", "h", "g", "l", "z" };
        String[] c = { "z", "d", "a", "h", "z", "a", "d", "e", "f", "m" };//

        quickSort(c, 0, 9);

        for (int i = 0; i < c.length; i++) {
            System.out.println(c[i]);
        }

    }

    public static int[] testttt() {
        return new int[10];
    }

    public static <T extends Comparable<T>> void insertSort(T[] a) {
        if (a.length < 0)
            return;
        for (int i = 1; i < a.length; i++) {
            T temp = a[i];
            int j = i - 1;
            for (; j >= 0 && a[j].compareTo(a[i]) > 0; j--) {
                a[j + 1] = a[j];
            }
            a[j + 1] = temp;
        }
    }

    public static <T extends Comparable<T>> void shellSort(T[] a) {
        if (a.length < 0)
            return;
        for (int gap = a.length / 2; gap > 0; gap /= 2) {
            for (int i = gap; i < a.length; i++) {
                int j = gap;
                T temp = a[j];
                for (; j > 0 && temp.compareTo(a[j - gap]) < 0; j -= gap) {
                    a[j] = a[j - gap];
                }
                a[j] = temp;
            }

        }
    }

    private static int leftChild(int i) {
        return 2 * i + 1;
    }

    public static <T extends Comparable<T>> void perChange(T[] array, int i,
            int n) {// 从i位置开始,到n,进行交换找到最大元素
        int child;
        T temp = array[i];
        for (; leftChild(i) < n; i = child) {
            child = leftChild(i);
            if (child != n - 1 && array[child].compareTo(array[child + 1]) < 0)
                child++;
            if (temp.compareTo(array[child]) < 0)
                array[i] = array[child];
            else
                break;
        }
        array[i] = temp;

    }

    public static <T extends Comparable<T>> void heapSort(T[] array) {

        for (int i = array.length / 2; i > 0; i--) {
            perChange(array, i, array.length);
        }
        for (int i = array.length - 1; i > 0; i--) {
            T temp = array[0];
            array[0] = array[i];
            array[i] = temp;
            perChange(array, 0, i);
        }

    }

    public static String[] merge(String[] a, String[] b) {
        int aLength = a.length;
        int bLength = b.length;
        String[] temp = new String[aLength + bLength];
        int i, j, k;
        for (i = 0, j = 0, k = 0; i < aLength && j < bLength;) {
            if (a[i].compareTo(b[j]) > 0) {
                temp[k] = b[j];
                j++;
                k++;
            } else {
                temp[k] = a[i];
                i++;
                k++;
            }

        }
        if (i == aLength) {
            for (; j < bLength; j++, k++) {
                temp[k] = b[j];
            }
        } else {
            for (; i < aLength; i++, k++) {
                temp[k] = a[i];
            }
        }
        return temp;

    }

    public static void mergeSort(String[] a, int left, int right) {
        if (left < right) {
            int middle = (left + right) / 2;
            mergeSort(a, left, middle);
            mergeSort(a, middle + 1, right);
            merge(a, left, right, middle);
        }

    }

    public static void merge(String[] a, int left, int right, int middle) {

        String[] temp = new String[a.length];
        int i, j, k;
        for (i = left, j = middle + 1, k = 0; i <= middle && j <= right;) {

            if (a[i].compareTo(a[j]) > 0) {

                temp[k] = a[j];
                j++;
                k++;
            } else {
                temp[k] = a[i];
                i++;
                k++;
            }

        }
        if (i == middle + 1) {
            for (; j <= right; j++, k++) {
                temp[k] = a[j];
            }
        } else {
            for (; i <= middle; i++, k++) {
                temp[k] = a[i];
            }
        }
        for (int i1 = left, k2 = 0; i1 <= right; i1++, k2++) {
            a[i1] = temp[k2];
        }

    }

    public static void quickSort(String[] a, int left, int right) {

        if (left < right) {
            int p = partion(a, left, right);
            quickSort(a, left, p - 1);
            quickSort(a, p + 1, right);
        }

    }

    private static int partion(String[] a, int left, int right) {
        String temp = a[left];
        while (left < right) {
            while (left < right && a[right].compareTo(temp) >=0){                
                right--;
            }
            a[left] = a[right];
            while (left < right && a[left].compareTo(temp) <=0){
                left++;
            }
            a[right] = a[left];

        }
        a[left] = temp;
        return left;
    }
}

 

插入排序,希尔排序,堆排序,归并排序,快速排序Java实现,布布扣,bubuko.com

插入排序,希尔排序,堆排序,归并排序,快速排序Java实现

标签:style   class   blog   code   java   ext   

原文地址:http://www.cnblogs.com/lisongfeng9213/p/3791225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!