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

排序算法之交换

时间:2018-04-17 11:38:17      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:元素   keyword   line   分治   view   index   注意   href   algorithm   

交换排序

3.冒泡排序

时间复杂度:O(n2)   O(n)   O(n2) 
空间复杂度:O(1) 

思想:对待排序元素的关键字从后往前进行多遍扫描,遇到相邻两个关键字次序与排序规则不符时,就将这两个元素进行交换。这样关键字较小的那个元素就像一个冒泡一样,从最后面冒到最前面来。
稳定性:稳定,相邻的关键字两两比较,如果相等则不交换。所以排序前后的相等数字相对位置不变。 
代码:

public static void bubbleSort(int[] array) {
    for (int i = 0; i < array.length; i++) {
        /**
         * 这边要注意 for (int j = array.length -1; j >= i + 1; j--)。 不要写成
         * for (int j =  i + 1; j < array.length ; j++)从后往前
         */
        for (int j = array.length -1; j >= i + 1; j--) {
            if (array[j -1 ] > array[j]) {
                //数据交换
                int temp = array[j - 1];
                array[j - 1] = array[j];
                array[j] = temp;
            }
        }
    }
}

4.快速排序

时间复杂度:O(n2)  O(nlogn)   O(nlogn) 
空间复杂度:O(nlogn)用于方法栈 

思想:该算法是分治算法,首先选择一个基准元素,根据基准元素将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。基准元素的选择对快速排序的性能影响很大,所有一般会想打乱排序数组选择第一个元素或则随机地从后面选择一个元素替换第一个元素作为基准元素。
稳定性:不稳定 快排会将大于等于基准元素的关键词放在基准元素右边。 
代码:

public static void quickSort(int[] arr){
    qsort(arr, 0, arr.length-1);
}
private static void qsort(int[] arr, int low, int high){
    if (low < high){
 int temp = arr[low];     //基准点
    while (low<high){
        while (low<high && arr[high]>=temp) --high;
        arr[low]=arr[high];             //交换比基准点小的记录到左端
        while (low<high && arr[low]<=temp) ++low;
        arr[high] = arr[low];           //交换比基准点小的记录到右端
    }
    //扫描完成,基准点与low交换
    arr[low] = temp;
    return low;
}
    qsort(arr, low, temp-1); //递归排序左子数组
    qsort(arr, temp+1, high);//递归排序右子数组
    }
}

排序算法之交换

标签:元素   keyword   line   分治   view   index   注意   href   algorithm   

原文地址:https://www.cnblogs.com/Hmssser/p/8861983.html

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