java数组排序之冒泡排序
上一篇文章说了,选择排序。
选择排序的原理就是,先确定第一个格子当中的数字是最小的,之后确定第二个格子是其他数字中最小的依次类推。
这一节当中我们来看下冒泡排序:
思路:
1、首先拿第一个数字跟第二个比,如果第二个数字大于第一个数字,那么保持各自位置,否则交换位置,让数字更小的那一个在前面,数字较大的在后面。第一个跟第二个比较完之后,紧接着第二个跟第三个进行比较,比较的原则也是根据第一次比较的原则,这样比较下去一直到数组的结尾,我们得到的是这个数组中的最大值,并且这个最大值在数组的结尾处。也就是说最末尾的值我们现在已经确定了,我们接下来确定的就是次末尾的值。然后再想之前那样循环遍历比较,只是此时的长度减一。
代码:
class SelectSort { public static void main(String[] args) { int[] arr = {12,87,34,39,134,4,45,8,21233,99}; printArr(arr); //selectSort(arr); maopaoSort(arr); printArr(arr); } public static void selectSort(int[] arr){ for(int i = 0; i<arr.length-1; i++) { for(int a = i + 1; a<=arr.length-1 ; a++) { /** * if(arr[i]>arr[a]) * { * int temp = arr[i]; * arr[i] = arr[a]; * arr[a] = temp; * } */ if(arr[i]>arr[a]) swap(arr,i,a); } } } public static void maopaoSort(int[] arr){ for(int n = 0 ; n<arr.length-1 ; n++) { for(int i = 0 ; i < arr.length-1-n ; i++) { if(arr[i]>arr[i+1]) swap(arr,i,i+1); } } } public static void printArr(int[] arr) { System.out.print("["); for(int i=0 ; i<arr.length ; i++){ System.out.print(arr[i]); if(i<arr.length-1) System.out.print(","); } System.out.print("]"); System.out.println(); } public static void swap(int[]arr,int x, int y) { int temp; if(arr[x]>arr[y]) { temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } }