排序算法

1.選擇排序spa

// 選擇排序   每次掃描找出最小的那個,放到正確的位置。
    public static int [] sort1(int [] data) {
        if(data == null) {
            return null;
        }

        int minIndex = 0;
        for(int i=0; i<data.length; i++) {
            minIndex = i;

            // 找出最小元素的索引
            for(int j=i+1; j<data.length; j++) {
                if(data[j] < data[minIndex]) {
                    minIndex = j;
                }
            }

            // 放到正確的位置
            if(minIndex != i) {
                int temp = data[i];
                data[i] = data[minIndex];
                data[minIndex] = temp;
            }
        }

        return data;
    }

2.冒泡排序code

// 冒泡排序   交換相鄰的兩個素,每一輪都會將最大的放到後面。
    public static int [] sort2(int [] data) {
        if(data == null) {
            return null;
        }

        boolean flag = false;
        for(int i=1; i<=data.length; i++) {
            for(int j=0; j<data.length - i - 1; j++) {
                if(data[j] > data[j+1]) {
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                    flag = true;
                }
            }
            if(!flag) {
                break;
            }
        }

        return data;
    }

3.插入排序blog

// 插入排序   將新的元素插入到已排好序的列表中。
    public static int [] sort3(int [] data) {
        if(data == null) {
            return null;
        }

        for(int i=1; i<data.length; i++) {
            int temp = data[i];
            int j = i - 1;
            for(; j>=0; j--) {
                if(data[j] > temp) {
                    data[j+1] = data[j];
                } else {
                    break;
                }
            }
            data[j+1] = temp;
        }

        return data;
    }

4.快速排序排序

// 快速排序   使用分治的思想。
    public static int partition(int [] data, int left, int right) {
        int i = left;
        int j = right;
        int temp = data[i];

        while(i < j) {
            while(i < j && data[j] > temp) {
                j--;
            }
            if(i < j) {
                data[i] = data[j];
//                data[j] = temp;
            }

            while(i < j && data[i] < temp) {
                i++;
            }
            if(i < j) {
                data[j] = data[i];
//                data[i] = temp;
            }

        }
        data[i] = temp;

        return i;
    }
    public static int [] sort(int [] data, int left, int right) {
        if(data == null) {
            return null;
        }

        int dp = 0;
        if(left < right) {
            dp = partition(data, left, right);
            sort(data, left, dp - 1);
            sort(data, dp + 1, right);
        }

        return data;
    }

 

先貼代碼索引

相關文章
相關標籤/搜索