2021-02-10(数据结构与算法-排序)

  1. 冒泡排序
  • 原理:比较两个相邻的元素,将值大的元素交换到右边

  • 思路:(1)由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数

(2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量

  • 优化:利用布尔值,如果一趟过后不需要交换,跳出循环

    for(int i = 0 ;iarr[j+1]){
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    
  1. 选择排序
  • 原理:从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列

  • 关键变量:minIndex 、min

         public static void selectSort(int [] arr){
             for (int i = 0; i < arr.length - 1; i++) {
                 int minIndex = i;
                 int min=arr[i];
                 // 找出最小值得元素下标
                 for (j = i + 1; j < arr.length; j++) {
                     if (min > arr[j]) {
                         minIndex = j;
                         min = arr[j];
                     }
                 }
                 if(minIndex != i){
                     arr[minIndex]=arr[i];
                     arr[i] = min;
                 }
             }
      
         }
    

你可能感兴趣的:(2021-02-10(数据结构与算法-排序))