美文网首页程序员
冒泡排序,选择排序,插入排序算法

冒泡排序,选择排序,插入排序算法

作者: 知识学者 | 来源:发表于2018-03-15 22:42 被阅读11次

    冒泡排序

    思路:二二交换,可以让最大的数沉底,在length-1次,就有序了

    package day20180315;
    
    public class Maopao {
    
        public static void main(String[] args) {
            int[] test= {-9,88,12,75,36,-621,10};
          mpsort(test);
          System.out.print(" sort the end of:");
          display(test);
    
        }
        
        static void mpsort( int[] arr)
        {
            for(int i=0;i<arr.length-1; i++)  //length-1趟排序
            {
                for(int j=0; j<arr.length-i-1; j++)
                {
                    if(arr[j]>arr[j+1])
                    {
                        int temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                                        
                    }
    
                }
                
                System.out.print("第"+(i+1)+"趟排序===");
                for(int k=0; k<arr.length; k++)
                {
    
                    System.out.print(","+arr[k]);
                }
                System.out.println();           
            }
            
            
        }
        
        //foreach循环。
        static void display(int[] arry)
        {
            for(int i:arry)
                System.out.print(" "+i);
        }
        
    
    }
    
    

    end

    第1趟排序===,-9,12,75,36,-621,10,88
    第2趟排序===,-9,12,36,-621,10,75,88
    第3趟排序===,-9,12,-621,10,36,75,88
    第4趟排序===,-9,-621,10,12,36,75,88
    第5趟排序===,-621,-9,10,12,36,75,88
    第6趟排序===,-621,-9,10,12,36,75,88
     sort the end of: -621 -9 10 12 36 75 88
    

    选择排序

    思路,每次选择最小的数,分别放在0--length-1的位置上。

    package day20180327;
    
    public class InsertDem {
    
        public static void main(String[] args) {
        
            int[] arry= {99,66,-8,23,100,45,7,-88};
            insert(arry);
            forarry(arry);
        }
        
        static void insert(int[] arr)
        {
            
        for(int i=0; i<arr.length-1; i++)
        {
            int index=i;
            
            //找出最小下标
            for(int j=i+1; j<arr.length; j++)
            {
            
              if(arr[index]>arr[j] )
              {
                  index=j;
              }      
                
            }
            //交换
             if(index!=i)
              {
                 int temp=arr[index];
                 arr[index]=arr[i];
                 arr[i]=temp;
              } 
             
             System.out.print("每"+(i+1)+"次排序结果:");
             forarry(arr);
             System.out.println();
        }
                        
        }
        
    static  void forarry(int[] arr)
        {
            for(int i:arr)
            {
                System.out.print(i+",");
            }
            System.out.println();
        }
        
        
        
    }
    
    
    

    end

    每1次排序结果:-88,66,-8,23,100,45,7,99,
    
    每2次排序结果:-88,-8,66,23,100,45,7,99,
    
    每3次排序结果:-88,-8,7,23,100,45,66,99,
    
    每4次排序结果:-88,-8,7,23,100,45,66,99,
    
    每5次排序结果:-88,-8,7,23,45,100,66,99,
    
    每6次排序结果:-88,-8,7,23,45,66,100,99,
    
    每7次排序结果:-88,-8,7,23,45,66,99,100,
    
    -88,-8,7,23,45,66,99,100,
    
    

    插入排序

    从1---length-1分别取出数组中的元素,放在前面有序的数组中。

    package day20180405;
    
    /*
     * 因为一个下标,以及交换问题,卡了好久。
     * 我还是菜鸟一个,要多多努力了。
     *
     */
    public class SelectDem {
    
        public static void main(String[] args) {
            
            int[] arry= {66,8,-3,87,12,-56,8};
            System.out.println("排序前的数组:");  
            display(arry);
            System.out.println();
            selectsort(arry);
            System.out.println("排序后的数组:");
            display(arry);
    
        }
        
        static void selectsort(int[] arr)
        {
            
            for(int i=0; i<arr.length-1; i++)
            {
                
                int flag=0;
              int index=0;
              int count=0;
              int temp=arr[i+1];
              
              for(int j=i;j>=0; j--)
              {   
                  if(arr[j]>temp)
                  {
        //SB了,没有在最开始保存插入的数组的元素,移动的时候保存被覆盖了。           
                     arr[j+1] =arr[j];  
                     flag=1;
                     index=j;
                     count++;
                  }
                  else {
                      
                    
                    break;
                  } 
                  
              }
              
              if(flag!=0)
              {
                  
        //这里千万不要交换,因为前面是把数组后移一位,在交换最后,最前面的元素,不是找死嘛。       
                //  arr[i+1]=arr[index];
                  arr[index]=temp;
        //只用插入的元素,放在合适的位置就行了。         
              }
                
    
            display(arr);
            System.out.println("---------第"+(i+1)+"    count="+count);
                    
                
            }
                
        }
        
        static void display(int[] arr)
        {
            for(int num:arr)
            System.out.print(" "+num);
        }
        
    
    }
    
    
    

    结果:

    排序前的数组:
     66 8 -3 87 12 -56 8
     8 66 -3 87 12 -56 8---------第1    count=1
     -3 8 66 87 12 -56 8---------第2    count=2
     -3 8 66 87 12 -56 8---------第3    count=0
     -3 8 12 66 87 -56 8---------第4    count=2
     -56 -3 8 12 66 87 8---------第5    count=5
     -56 -3 8 8 12 66 87---------第6    count=3
    排序后的数组:
     -56 -3 8 8 12 66 87
    
    

    三个时间复杂度为n*n的排序算法,被我写出来了,这是比较low的。
    等我准备好后,来写归并排序,和快排。

    相关文章

      网友评论

        本文标题:冒泡排序,选择排序,插入排序算法

        本文链接:https://www.haomeiwen.com/subject/chmkqftx.html