常用的排序算法:
快速排序的空间复杂度为log2n,没有n乘
package com.zrm.bubble;
/*
bubble sort相邻两个元素进行比较选出(大的或者是小的一个)来进行位置交换然后接着喝后面的数进行比较
重复相同的操作一次循环可以选出一个最大或者最小的数排在最后一个,剩下的再重复之前的操作找出下一个
*/
public class BubbleSort {
public static int[] list = {1,5,2,7,8,6,4,9};
public static void sort(){
for (int i=list.length-1;i>0;i--){
for (int j=0;j<i;j++){
if(list[j]>list[j+1]){
int temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
for (int a:list){
System.out.print(a+" ");
}
}
public static void main(String[] args) {
BubbleSort.sort();
}
}
package com.zrm.insertion;
/*
插入排序从第二个数开始跟前一个数做比较,如果比前一个数小就插入到他的前面(交换位置),然后再把第三个数
拿来跟第二个数比较一步步插入到里面,最终可以排好序;
*/
public class InsertionSort {
public static int[] list = {1, 5, 2, 7, 8, 6, 4, 9};
public static void sort() {
for (int i = 1; i < 8; i++)
for (int j = i; j > 0; j--) {
if (list[j] < list[j - 1]) {
int temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
}
}
for (int a : list) {
System.out.print(a + " ");
}
}
public static void main(String[] args) {
InsertionSort.sort();
}
}
package com.zrm;
public class ShellSort {
/*
* 希尔排序是在插入排序的基础上进行的优化的一种排序,希尔排序给待排序数组设置一个间隔
* 在此间隔的基础上从数组中取数进行一次插入排序,依次排完一次;之后把间隔缩小接着排,
* 最终间隔为1的时候就跟普通的插入排序一样了,但是总的来说希尔排序的效率比直接用插入排序要搞一些
* 空间复杂度为O(1),时间复杂度最好为O(1^3);间隔最优为:
* h= 1;
* h = 3*h +1;
*/
public static void main(String[] args) {
//待排序数组
int[] arr = new int[]{2, 4, 1, 3, 7, 9, 5, 6, 8, 11, 13, 15, 14, 12};
//排序
for (int gap = 4; gap > 0; gap--) {
for (int i = gap; i < arr.length; i++) {
for (int j = i; j > gap - 1; j -= gap) {
if (arr[j] < arr[j - gap]) {
int temp = arr[j - gap];
arr[j - gap] = arr[j];
arr[j] = temp;
}
}
}
}
//打印
for (int x : arr) {
System.out.println(x + " ");
}
}
}