Java的三个基础排序算法(其余将在以后补充)
第一个:冒泡排序算法
原理:相邻的两个值进行比较,如果前面的比后面的大就交换位置
eg:假设有5个元素的一个array
- 第一次:会比较4次,将最大的值放在最右边
- 第二次:会比较3次,又排出剩余4个元素的最大值
- 依次向下,知道最后一个,这样数组就算是排完了
package day16_nullnull; import java.util.Arrays; //冒泡排序算法的例子 public class null01_BubbleSort { public static void main(String[] args) { int[] arr = {55,22,11,33,77,66}; //总共是要需要通过length-1次达到排序效果 for(int i=0;i<arr.length;i++){ //第一次0-1 1-2 2-3 3-4 4-5 //第二次0-1 1-2 2-3 3-4 //依次向下 for(int j=0;j<arr.length-i-1;j++){ System.out.println(j+"-"+(j+1)); if(arr[j]>arr[j+1]){ arr[j] = arr[j]^arr[j+1]; arr[j+1] = arr[j]^arr[j+1]; arr[j] = arr[j]^arr[j+1]; } } System.out.println("************"); } System.out.println(Arrays.toString(arr)); } }
第二个:数组高级选择排序
原理:和上面的冒泡排序几乎是刚好相反,它会将小的向左边放,直到全部排序结束
package day16_nullnull; import java.util.Arrays; //数组高级选择排序 public class null02ArrayAdvancedSelectionSorting { public static void main(String[] args) { int[] arr = {99,55,33,44,77,66,11}; //同上一个,也是需要经过length-1次排序 for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } System.out.println(Arrays.toString(arr)); } }
第三个:数组高级二分查找(折半查找)
二分查找又称为折半查找(让我想到了初中的一些数学题),目的是查找元素的索引,优点是查找次数少了,速度会快一些,平均性能好。但是却有一个前提,就是等待查询的数组啊必须是有序的(他要折半找最小最大中间值)。
package day16_nullnull; //二分查找的例子 public class null03_BinarySearch { public static void main(String[] args) { int[] arr = {11,22,33,44,55,66,77,88}; int max = arr.length-1;//取出最大值的索引 int min = 0;//指定最小值的索引 int mid = (min + max) / 2; //求出中间值的索引 int find = 66; //指定想要找到的值 while(find!=arr[mid]){ if(find<arr[mid]){ max = mid-1; }else{ min = mid + 1; } mid = (min+max) / 2; if(min>max){ System.out.println("找不到"); System.exit(0); } } System.out.println("index:"+mid); } }