三种最基本的排序方法


1、冒泡排序

    /*冒泡排序是指,对长度为n的数组进行n-1次冒泡。第一次冒泡,从左至右逐个检查,对相邻元素进行检查,若左边元素大于右边,则交换两者位置,直到检查到最后两个元素即将整个数组中最大的元素排到最后面;第二次冒泡,只检查前面n-1个元素,进行n-2次冒泡,即可将次大的元素排好。重复上述动作,共进行1+2+...+(n-1)次排序,即可完成对整个数组的排序。*/
     public void maopao ()

  {

       // i代表每次冒泡排序的数组长度,排完一次待排数组长度减一

         for(int i=n;i>1;i--)

          {

            Bubble(a,i);

           }

          for(int k=0;k<n;k++)

         {
         System.out.print("\r 冒泡:"+a[k]);

         }

  }


  static void Bubble(int b[],int n){
for(int j=0;j<n-1;j++){
if(b[j]>b[j+1]){
int temp=b[j+1];
b[j+1]=b[j];
b[j]=temp;
}
}
}

   




2、选择排序

/*选择排序是指首先在长度为n的数组中找到最大元素,然后将其与最后元素a[n-1]互换位置。随后,余下的n-1个元素中再寻找最大元素,把它移到a[n-2]。如此进行下去直到只剩下一个元素。*/

  public void xuanze()

  {


      for(int size=n;size>1;size--)

      {
           int max=Max(a,size);
           int temp=a[max];
           a[max]=a[size-1];
           a[size-1]=temp;
         }

    for(int k=0;k<n;k++)

         {
            System.out.print("\r 选择:"+a[k]);

         }

   }

       static int Max(int c[],int n){
          int pos=0;
          for(int j=1;j<n;j++){
             if(c[pos]<c[j]){
                 pos=j;
              }
 
            }
          return pos;
 
        }

   


3、插入排序

/*插入排序是指每次都将当前元素插入到前面已经排好的有序数组中去。第一次排序,比较最前面两个元素,若第二个元素大于第一个,则将第二个元素插到第一个前面;第二次排序,目的是将第三个元素插入到已经排好序的前两个数中,因此依次与第二个,第一个比较并交换位置。重复上述动作,直到最后一个元素a[n-1]成功插入到前面长度为n-1的有序数组中*/

  public void charu()

  {


      for(int i=1;i<n;i++){ 
         int t=a[i];
         Insert(a,i,t);
     }

     for(int k=0;k<n;k++)

         {
            System.out.print("\r 插入:"+a[k]);

         }

   }

      static void Insert(int d[],int n,int x){
            int i=0;
            for(i=n-1;i>=0&&x<d[i];i--){
               d[i+1]=d[i];
               d[i]=x;
            }
       }



测试:

   public static void main(String[] args)  {

        int []a={25,24,12,76,98,101,90,28};
        int n=a.length;

        maopao();

        xuanze();

        charu();

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值