七种经典排序代码

1、冒泡排序

public class Bubble {

    public static void sort(int[] arr){
        for(int i = 0; i < arr.length -1; i++){
            for(int j = 0; j < arr.length - i -1; j++){
                if(arr[j] > arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
    }
    
    private static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}

2、插入排序

public class Insertion {
    public static void sort(int[] arr){
        for(int i = 1; i < arr.length; i++){
            for(int j = i; j > 0 && arr[j] < arr[j-1] ; j--){
                swap(arr,j-1,j);
            }
        }
    }
    
    private static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}

3、选择排序

public class Selection {
    public static void sort(int[] arr){
        for(int i = 0; i < arr.length -1; i++){
            int index = i;
            int min = arr[i];
            for(int j = i; j < arr.length; j++){
                if(arr[j] < min){
                    min = arr[j];
                    index = j;
                }
            }
            arr[index] = arr[i];
            arr[i] = min;
        }
    }
}

4、希尔排序

public class Shell {
    public static void sort(int[] arr){
        int d = arr.length / 2;
        while(d >= 1){
            for(int i = d; i < arr.length; i ++){
                for(int j = i; j >= d && arr[j] < arr[j-d]; j -= d){
                    swap(arr,j,j-d);
                }
            }
            d /= 2;
        }
    }
    
    private static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}

5、快速排序

public class Quick {
    public static void sort(int[] arr){
        quickSort(arr, 0, arr.length - 1);
    }

    private static void quickSort(int[] arr, int start, int end) {
        if(end <= start){
            return;
        }
        int mid = start;
        int base = arr[start];
        int left = start;
        int right = end;
        while(left < right){
            while(left < right && arr[right] >= base){
                right--;
            }
            if(left < right){
                arr[mid] = arr[right];
                mid = right;
            }
            while(left < right && arr[left] <= base){
                left++;
            }
            if(left < right){
                arr[mid] = arr[left];
                mid = left;
            }
        }
        arr[mid] = base;
        quickSort(arr, start, mid - 1);
        quickSort(arr, mid + 1, end);
    } 
}

 

6、归并排序

public class Merge {
    public static void sort(int[] arr){
        build(arr, 0, arr.length - 1);
    }

    private static void build(int[] arr, int start, int end) {
        if(start >= end){
            return;
        }
        int mid = (start + end) / 2;
        build(arr, start, mid);
        build(arr, mid + 1, end);
        merge(arr, start, end, mid);
    }

    private static void merge(int[] arr, int start, int end, int mid) {
        int[] temp = new int[arr.length];
        int left = start;
        int right = mid + 1;
        int record = start;
        while(left <= mid && right <= end){
            if(arr[left] > arr[right]){
                temp[record] = arr[right];
                right++;
                record++;
            }else{
                temp[record] = arr[left];
                left++;
                record++;
            }
        }
        while(left <= mid){
            temp[record] = arr[left];
            left++;
            record++;
        }
        while(right <= end){
            temp[record] = arr[right];
            right++;
            record++;
        }
        for(int i = start; i <= end; i++){
            arr[i] = temp[i];
        }
    }
}

7、堆排序

public class Heap {
    public static void sort(int[] arr){
        for(int i = arr.length - 1; i > 0; i--){
            for(int j = (i - 1) / 2; j >= 0; j--){
                if(2*j + 1 == i){
                    if(arr[j] <= arr[2*j + 1]){
                        swap(arr,j,2*j + 1);
                    }
                }else{
                    if(arr[j] <= arr[2*j + 1]){
                        swap(arr,j,2*j + 1);
                    }
                    if(arr[j] <= arr[2*j + 2]){
                        swap(arr,j,2*j + 2);
                    }
                }
            }
            swap(arr, 0, i);
        }
    }
    
    private static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}

 

posted on 2018-12-25 20:15  Soloman_k  阅读(198)  评论(0)    收藏  举报

导航