冒泡排序和选择排序(以及交换两个值的两种方法)
冒泡排序:
思想:(从小到大排序为例)从第一个数组元素开始,依次进行两两比较,如果前面的元素比后面的元素大则进行交换,循环一次,就可以选出最大元素
第二轮循环从第二个元素开始,依次进行两两比较,选出第二大的元素,依次类推..........
原理展示:

Java代码:
1 private static void MaoPao(int[] arr) { 2 for (int i = 0; i < arr.length - 1; i++ ){ //控制轮数 3 for(int j = 0; j < arr.length - 1 - i ; j++){ //控制每轮比较次数 4 if(arr[j] > arr[j+1]){ 5 arr[j] = arr[j]^arr[j + 1]; 6 arr[j+1] = arr[j]^arr[j + 1]; 7 arr[j] = arr[j]^arr[j + 1]; 8 } 9 } 10 } 11 for(int i = 0 ; i< arr.length;i++){ 12 System.out.println(arr[i]); 13 } 14 }
选择排序:
思想:(从小到大为例)用第一个数组元素与其他各元素进行比较,如果后边的元素比第一个元素小,则记录较小元素的下标并用这个较小的元素跟后边的元素进行比较,如果后边的元素还有比这个更小的,则再次记录下表,并用这个更小的元素与后边比较,直到比到最后一个元素,一轮以后,最小的元素就被找到并作为数组的第一个元素。
第二轮用第二个元素依次与后边进行比较,依此类推.........
原理展示:

Java代码:
1 private static void Select(int[] arr) { 2 for (int i = 0; i < arr.length - 1; i++) { 3 int min = i; 4 // 每轮需要比较的次数 N-i 5 for (int j = i + 1; j < arr.length; j++) { 6 if (arr[j] < arr[min]) { 7 // 记录目前能找到的最小值元素的下标 8 min = j; 9 } 10 } 11 12 // 将找到的最小值和i位置所在的值进行交换 13 if (i != min) { 14 int tmp = arr[i]; 15 arr[i] = arr[min]; 16 arr[min] = tmp; 17 } 18 19 } 20 for(int i = 0 ; i< arr.length;i++){ 21 System.out.println(arr[i]); 22 } 23 }

浙公网安备 33010602011771号