排序之初级篇

来源:互联网 发布:宜居星球知乎 编辑:程序博客网 时间:2024/05/23 20:50

排序算法之初级排序

冒泡排序

原理:计较相邻两个元素,将较大元素替换到后面,经历n-1次趟后,数组就排好序了。

代码:

public static void bubbleSort2(int[] nums){    if (nums.length == 0)        return;    int n = nums.length;    for (int i=0;i<n-1;i++){ // 经历n-1趟        for (int j=0;j<n-i-1;j++){            if (nums[j] > nums[j+1]){                int tmp = nums[j];                nums[j] = nums[j+1];                nums[j+1] = tmp;            }        }    }    return;}

时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性排序 数组的初始排列并不影响时间复杂度

插入排序

原理:假定前面的元素已经排好序了,不断比较前面的数据元素,直至找到合适插入位置。

代码:

public static void insertSort2(int[] nums){    int n = nums.length;    for (int i=1;i<n;i++){ // 插入元素        int tmp = nums[i];        int j = i-1;        for (;j>=0;j--){            if (nums[j] > tmp){                nums[j+1] = nums[j];            }else {                break;            }        }        nums[j+1] = tmp;    }}

时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性排序

评价:比冒泡排序好,因为它可以提前结束循环,对于近乎有序的数组,它的时间复杂度为O(N)。

选择排序

原理:不断在剩下的元素中进行比较然后找出最小的元素。

代码:

public static void selectSort2(int[] nums){    int n = nums.length;    for (int i=0;i<n-1;i++){        for (int j=i+1;j<n;j++){            if (nums[j] < nums[i]){                int tmp = nums[j];                nums[j] = nums[i];                nums[i] = tmp;            }        }    }    return;}

时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性排序 数组的初始排列并不影响其时间复杂度。