java-数组排序--冒泡排序、鸡尾酒排序、地精排序
冒泡排序
冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了
见图解
稳定性:稳定
时间复杂度:O(n2)
1 public static void bubbleSort(int[] arr) { 2 3 for (int i = 0; i < arr.length; i++) { 4 for (int j = 0; j < arr.length-1-i; j++) { 5 if(arr[j]>arr[j+1]) { 6 int t=arr[j]; 7 arr[j]=arr[j+1]; 8 arr[j+1]=t; 9 } 10 } 11 } 12 13 }
动态图解
鸡尾酒排序
鸡尾酒排序是冒泡排序的改进,当算法将一个最大数冒泡到列尾时,再从列尾开始将最小值冒泡到列首
见图解
稳定性:稳定
时间复杂度:O(n2)
1 public static void coktailSort(int[] arr) { 2 3 for (int i = 0; i < arr.length/2; i++) { 4 for (int j = i; j < arr.length-1-i; j++) { 5 if(arr[j]>arr[j+1]) { 6 int t=arr[j]; 7 arr[j]=arr[j+1]; 8 arr[j+1]=t; 9 } 10 } 11 for (int j = arr.length-(1+1)-i; j >i; j--) { 12 if(arr[j]<arr[j-1]) { 13 int t=arr[j]; 14 arr[j]=arr[j-1]; 15 arr[j-1]=t; 16 } 17 } 18 } 19 20 }
动态图解
地精排序
地精排序,传说有一个地精在排列一排花盘。他从前至后的排列,如果相邻的两个花盘顺序正确,他向前一步;如果花盘顺序错误,他后退一步,直到所有的花盘的顺序都排列好。(地精排序思路与插入排序和冒泡排序很像, 主要其对代码进行了极简化)
稳定性:稳定
时间复杂度:O(n2
1 public static void gnomeSort(int[] arr) { 2 3 int i=1; 4 while(i<arr.length) { 5 6 if(i==0||arr[i]>=arr[i-1]) { 7 i++; 8 }else { 9 int t=arr[i]; 10 arr[i]=arr[i-1]; 11 arr[i-1]=t; 12 i--; 13 } 14 15 } 16 17 }
如果有地方写的错误,或者有什么疑问与建议,欢迎大家提出来 愿与大家一同进步