排序

1、快速排序
先从数列中取出一个数作为基准数。
将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
再对左右区间重复第二步,直到各区间只有一个数。

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        quickSort(arr,0,arr.length-1);
        return arr;
    }
    public void quickSort(int[] a, int left, int right) {
        if (left < right) {
            int i = left;
            int j = right;
            int x = a[i];
            while (i<j) {
                while (i<j && a[j] > x)
                    j--;
                if (i<j)
                    a[i++] = a[j];
                while (i<j && a[i] < x)
                    i++;
                if (i<j)
                    a[j--] = a[i];
            }
            a[i] = x;
            quickSort(a, left, i-1);
            quickSort(a, i+1, right);
        }
    }
}

2、归并排序
递归划分整个区间为基本相等的左右区间,直到左右区间各只有一个数字,然后就合并两个有序区间。

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        // write code here
        sort(arr, 0, arr.length-1);
        return arr;
    }
    public void sort(int[] arr, int left, int right) {
        if (left == right)
            return;
        int mid = (left + right)/2;
        sort(arr, left, mid);
        sort(arr, mid+1, right);
        merge(arr, left, mid, right);
    }
    public void merge(int[] arr, int left, int mid, int right) {
        int[] tmp = new int[right-left+1];
        int k = 0;
        int l = left;
        int r = mid+1;
        while (l<=mid && r<=right) {
            if (arr[l] < arr[r])
                tmp[k++] = arr[l++];
            else
                tmp[k++] = arr[r++];
        }
        while (l<=mid)
            tmp[k++] = arr[l++];
        while (r<=right)
            tmp[k++] = arr[r++];
        for (k=0; k<tmp.length; k++)
            arr[left+k] = tmp[k];
    }
}
全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务