排序算法的步步解析

眉间皱痕 提交于 2020-03-06 00:07:14

总结镇楼:只讲自己的细节

          

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

  代码如下:核心思想:第二次循环中数组元素的两两比较,再重复这个循环数组长度次

public static int[] maopao(int[] arrs){
      int length=arrs.length;
      int temp;
      if(length==0){
          return arrs;
      }
      //第一个循环是让比较的遍数进行到“数组长度次”
          for (int i=0;i<length;i++) {
              /*/
              冒泡排序的两两比较具体步骤只需用一个循环,因为最佳的状况时其时间复杂度为n
              这里需要注意的是第二个循环的长度,冒泡排序发每次循环都会得出一个数组中剩余数的最大值放到后面
              因此每次循环都会使循环的次数减一,而最多经历数组长度次的循环之后整个数组就会排序完毕
               */
              for (int j=0;j<length-1-i;j++){
                  //简单的三方转换
                 if (arrs[j]>arrs[j+1]){
                     temp=arrs[j+1];
                     arrs[j+1]=arrs[j];
                     arrs[j]=temp;
                 }
              }
          }
    return arrs;
}

 

-----------------------------------------------

 

2.选择排序:从头到尾扫描一遍数组,将其中的最小值放到最前面,

(最容易想到的就是选择排序,但是其效率并不高)

代码如下:核心思想:第二次循环中所有数组元素跟第一次循环中的一个数组元素进行比较

public static int[] xuanze(int[] arrs){
    int length=arrs.length;
    int min;
    if (length==0){
        return arrs;
    }
    //第一次循环只需循环到数组的长度减一即可,因为每次都把较小值放在前面
    // 剩下的最后一个必然就是最大值了
    for (int i=0;i<arrs.length-1;i++){
        /*/
          第二次循环中的j必须是 i+1,因为每次把最小值放在前面,
          即需要排序的数也变少了 
         */
        for (int j=i+1;j<arrs.length;j++){
           if (arrs[i]>arrs[j]){
               min=arrs[j];
               arrs[j]=arrs[i];
               arrs[i]=min;
           }
        }
    }
    return arrs;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!