冒泡排序和选择排序(以及交换两个值的两种方法)

冒泡排序:

  思想:(从小到大排序为例)从第一个数组元素开始,依次进行两两比较,如果前面的元素比后面的元素大则进行交换,循环一次,就可以选出最大元素

              第二轮循环从第二个元素开始,依次进行两两比较,选出第二大的元素,依次类推..........

  原理展示:

    

  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     }

 

posted @ 2020-11-23 18:38  Learn丶馒头  阅读(301)  评论(0)    收藏  举报