工作生活

排序算法 (归并+选择) --java

2019-07-01  本文已影响0人  楊柯林

排序算法 第一篇

1 归并排序

采用递归思想
将数组采用递归思想分为两部分,两部分再细分

    public static void merge(int[] arr,int low,int high){
        int middle =(high+low)/2;
        if(low<high){
//            处理左边
            merge(arr,low,middle);
//            处理右边
            merge(arr,middle+1,high);
//            归并
            mergeSort(arr,low,middle,high);
        }

    }

    private static void mergeSort(int[] arr,int low,int middle,int high) {

        //用于存储归并后的临时数组
        int[] temp=new int[high-low+1];
//        记录第一个数组中需要遍历的下标
        int i=low;
//        记录第二个数组中需要遍历的下标
        int j=middle+1;
//        用于记录在临时数组中存放的下标
        int index=0;
//        遍历两个数组,取出小的数字,放入临时数组中
        while (i<=middle&&j<=high){
            if(arr[i]<=arr[j]){
//                把小的数据放入临时数组中
                temp[index]=arr[i];
//                让下标向后移一位
                i++;
            }else {
                temp[index]=arr[j];
                j++;
            }
            index++;
        }
        while (j<=high){
            temp[index]=arr[j];
            j++;
            index++;
        }
        while (i<=middle){
            temp[index]=arr[i];
            i++;
            index++;
        }
//        临时数组中数据重新存入原数组
        for (int k = 0; k < temp.length; k++) {
            arr[k+low]=temp[low];
        }
    }

2 选择排序

每次遍历取出最小的,然后排好的最小的前一组去和后面进行比较拿出最小的

//    选择排序
    private static void selectSort(int[] arr) {
//        遍历所有的数
        for(int i=0;i<arr.length;i++){
            int minIndex=i;
//            把当前遍历的数和后面所有的数进行比较,记录最小数的下表
            for (int j = i; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {
//                    记录下最小数的下标
                    minIndex=j;
                }
            }
//            如果最小数和当前遍历数下标不一致,说明找到了更小的数
            if(i!=minIndex){
                int temp=arr[i];
                arr[i]=arr[minIndex];
                arr[minIndex]=temp;
            }
        }
    }
上一篇下一篇

猜你喜欢

热点阅读