排序算法,有很多。下面来介绍几种常见的排序算法。
对于排序算法来说,我们要将要排序的数组,传入方法中,也需要交换两个数字的方法,下面是数字交换的方法:
//交换
public void swap(int[] arr,int i,int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
一、直接插入排序
直接插入排序,是找到合适的位置,直接插入有序的数组中。代码思想,先固定第一个元素是有序的,根据前面有序的部分,一个一个往下进行插入的操作,使数组有序的排序算法。代码如下:
/*
直接插入排序
时间复杂度:最坏情况: O(n^2) ---> 逆序序列 最好情况:O(n) ---> 顺序序列
空间复杂度:O(1)
稳定性:稳定
*/
public void insertSort(int[] arr) {
//开始可以认为第0个位置是排好序
for (int i = 0;i < arr.length-1;i++) {
int key = arr[i+1];
int end = i;
while (end >= 0 && arr[end] > key) {
arr[end+1] = arr[end];
end--;
}
arr[end+1] = key;
}
}
二、希尔排序
希尔排序,是规定间隔gap排序对应的元素,直到gap=1时,数组有序。gap的确定一般是数组长度/2或/3,直到最后gap变为1,在排序整个数组。代码如下:
/*
希尔排序
时间复杂度:O(n) ------> O(n^2)
空间复杂度:O(1)
稳定性:不稳定
*/
public void shellSort(