经常撕逼的一个问题,一个程序员联冒泡排序都写不出来....说实话,不经常用真有可能写不出来,这两个for循环很容易弄错,只能说明的就是实现原理。
注:看结果更好理解程序。。。
冒泡排序
package sort; /** * 冒泡排序 * @author mercy * 前一个和后一个比较找出最大值,再依次找找除了最大值的下一个最大值。 */ public class BubbleSort { public static void sort(int arr[]) { for (int i = 1; i < arr.length; i++){ for (int j = 0; j < arr.length-i; j++) { //比的次数随着i的值越大次数越少 if (arr[j] > arr[j + 1]) //值大的往后放,否则值小的往后放 int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } for (int m = 0; m < arr.length; m++) { System.out.print(arr[m] + " "); } System.out.println(" "); } System.out.println("数组长度为:" + arr.length); } public static void main(String[] args) { int[] arr = {5, 3, 9, 0, 6}; BubbleSort.sort(arr); } }
结果:
3 5 0 6 9 3 0 5 6 9 0 3 5 6 9 0 3 5 6 9 数组长度为:5
选择排序
package sort; //选择排序 第0个和第1个第2个n个比较大小,第1个和第二个和第n个比较大小,找出最大值,依次找出剩余最大值 public class SelectSort { public static void sort(int[] arr){ for(int i=0;i<arr.length-1;i++) { for(int j=i+1;j<arr.length;j++) { if(arr[i]>arr[j])//值小的往前放,否则值大的往前放 { int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } for(int m=0;m<arr.length;m++){ System.out.print(arr[m]+" "); } System.out.println(" "); } System.out.println("数组长度为:" + arr.length); } public static void main(String[] args) { int[]arr={5,3,9,0,6}; SelectSort.sort(arr); } }
结果:
0 5 9 3 6 0 3 9 5 6 0 3 5 9 6 0 3 5 6 9 数组长度为:5
插入排序,插入排序的原理是:每一次将要排序的数插入前面已经排完序的队列中,直到全部记录插入为止。
插入排序有三种实现,一种是直接插入,一种是折半插入,一种是希尔排序。很好理解,代码真心不好写。