经常会忘记这几种排序的思路是什么,可能理解不够,特此记录一下,方便时常翻看。
首先是几种排序的比较:
1. 冒泡排序(两两轮流比较)
冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。这种方法主要是通过对相邻两个元素进行大小的比较,根据比较结果和算法规则对该二元素的位置进行交换,这样逐个依次进行比较和交换,就能达到排序目的。
时间复杂度是O(n²) : (n-1)+(n-2)+……+1
public static void bubbleSort(int[]arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
/**
* 优化后的冒泡排序-与初始顺序有关
*/
public static void main(String[] args) {
int []arr={9,8,7,6,5};
int len=arr.length;
for (int i=0;i<len-1;i++) {
System.out.println("第"+(i+1)+"趟");
//增加判断位
boolean flag=true;
for (int j=0;j<len-1-i;j++) {
System.out.println("第"+(j+1)+"次");
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=false;
}
System.out.println(Arrays.toString(arr));
}
// 如果上面没有执行直接退出。每两两比较后面的总比前面的大,说明已经是排好序的。
if(flag){
break;
}
}
}
2. 选择排序(一比多轮流比较)