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

排序算法

时间:2017-12-20 21:54:33      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:复杂度   blog   quic   quicksort   partition   基数排序   bsp   排序   计数排序   

1)插入排序(从第二个元素开始,依次从剩余元素中选择一个,插入到前面有序的子序列中)

public static void insertSort(int[] nums){
        if ( nums == null ){
            return;
        }
        int len = nums.length;
        int tmp, j;
        for(int i = 1; i < len; ++i){
            tmp = nums[i];
            j = i - 1;
            while( j >= 0 && tmp < nums[j]){
                nums[j + 1] = nums[j];
                j--;
            }
            nums[j + 1] = tmp;
        }
    }

 

2)快速排序(不是稳定的排序,平均时间复杂度O(nlogn))

public void quickSort(int[] a, int low, int high) {
        if (low < high) {
            int location = partition(a,low,high);
            quickSort(a, low, location - 1);
            quickSort(a, location + 1, high);
        }
    }
    
    public int partition(int[] a, int left, int right) {
        if (left < right) {
            int pivot = a[left];
            while(left < right){
                while (left < right && a[right] >= pivot) {
                    right--;
                }
                a[left] = a[right];
                while (left < right && a[left] <= pivot) {
                    left++;
                }
                a[right] = a[left];
            }
            a[left] = pivot;
        }
        return left;
    }

 

3)归并排序(是稳定的排序算法,时间复杂度O(nlogn))

public void mergeSort(int[] a, int low, int high) {
        if (low < high) {
            int mid = (low + high) / 2;
            mergeSort(a, low, mid);
            mergeSort(a, mid + 1, high);
            merge(a, low, mid, high);
        }
    }
    
    public void merge(int[] a, int left, int mid, int right) {
        if (left < right){
            int len = right - left + 1;
            int[] b = new int[len];
            int i = left, j = mid + 1, k = 0;
            while(i <= mid && j <= right){
                if (a[i] <= a[j]) {
                    b[k++] = a[i++];
                } else {
                    b[k++] = a[j++];
                }
            }
            while (i <= mid) {
                b[k++] = a[i++];
            }
            while (j <= right) {
                b[k++] = a[j++];
            }
            for (int l = 0; l < k; ++l){
                a[l + left] = b[l];
            }
        }
    }

 

4)堆排序(不是稳定的排序,时间复杂度O(nlogn))

 

5)计数排序、基数排序、桶排序。

排序算法

标签:复杂度   blog   quic   quicksort   partition   基数排序   bsp   排序   计数排序   

原文地址:http://www.cnblogs.com/mydesky2012/p/8075613.html

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