您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    面试前必看的十大排序算法(5)
    时间:2021-08-25 12:03 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    private static void merge(int[] array, int l, int mid, int r) { 

      int lindex=l;int rindex=mid+1

      int team[]=new int[r-l+1]; 

      int teamindex=0

      while (lindex<=mid&&rindex<=r) {//先左右比较兼并 

        if(array[lindex]<=array[rindex]) 

        { 

          team[teamindex++]=array[lindex++]; 

        } 

        else {     

          team[teamindex++]=array[rindex++]; 

        } 

      } 

      while(lindex<=mid)//当一个越界后剩余按序列添加即可 

      { 

        team[teamindex++]=array[lindex++]; 

     

      } 

      while(rindex<=r) 

      { 

        team[teamindex++]=array[rindex++]; 

      }  

      for(int i=0;i<teamindex;i++) 

      { 

        array[l+i]=team[i]; 

      } 

     

    桶类排序

    桶排序是一种用空间换取时间的排序,桶排序重要的是它的思想,而不是详细完成,时间复杂度最好能够是线性O(n),桶排序不是基于比较的排序而是一种分配式的。桶排序从字面的意思上看:

    桶:若干个桶,阐明此类排序将数据放入若干个桶中。

    桶:每个桶有容量,桶是有一定容积的容器,所以每个桶中能够有多个元素。

    桶:从全体来看,整个排序更希望桶可以更匀称,即既不溢出(太多)又不太少。

    桶排序的思想为: 「将待排序的序列分到若干个桶中,每个桶内的元素再停止一般排序。」 当然桶排序选择的方案跟详细的数据有关系,桶排序是一个比较普遍的概念,并且计数排序是一种特殊的桶排序,基数排序也是树立在桶排序的基础上。在数据散布平均且每个桶元素趋近一个时间复杂度能到达O(n),但是假设数据范围较大且相对集中就不太适宜运用桶排序。 

    面试前必看的十大排序算法


    完成一个复杂桶排序:

    import java.util.ArrayList; 

    import java.util.List; 

    //微信群众号:bigsai 

    public class bucketSort { 

     public static void main(String[] args) { 

      int a[]= {1,8,7,44,42,46,38,34,33,17,15,16,27,28,24}; 

      List[] buckets=new ArrayList[5]; 

      for(int i=0;i<buckets.length;i++)//初始化 

      { 

       buckets[i]=new ArrayList<Integer>(); 

      } 

      for(int i=0;i<a.length;i++)//将待排序序列放入对应桶中 

      { 

       int index=a[i]/10;//对应的桶号 

       buckets[index].add(a[i]); 

      } 

      for(int i=0;i<buckets.length;i++)//每个桶内停止排序(运用系统自带快排) 

      { 

       buckets[i].sort(null); 

       for(int j=0;j<buckets[i].size();j++)//特地打印输入 

       { 

        System.out.print(buckets[i].get(j)+" "); 

       } 

      }  

     } 

    计数排序

    计数排序是一种特殊的桶排序,每个桶的大小为1,每个桶不在用List表示,而通常用一个值用来计数。

    在 「设计详细算法的时分」 ,先找到最小值min,再找最大值max。然后创立这个区间大小的数组,从min的位置末尾计数,这样就可以最大水平的紧缩空间,提空中间的运用效率。 

    面试前必看的十大排序算法


    public static void countSort(int a[]) 

      int min=Integer.MAX_VALUE;int max=Integer.MIN_VALUE; 

      for(int i=0;i<a.length;i++)//找到max和min 

      { 

        if(a[i]<min)  

          min=a[i]; 

        if(a[i]>max) 

          max=a[i]; 

      } 

      int count[]=new int[max-min+1];//对元素停止计数 

      for(int i=0;i<a.length;i++) 

      { 

        count[a[i]-min]++; 

      } 

      //排序取值 

      int index=0

      for(int i=0;i<count.length;i++) 

      { 

        while (count[i]-->0) { 

          a[index++]=i+min;//有min才是真正值 

        } 

      } 

    基数排序 (责任编辑:admin)