排序算法-----冒泡排序和选择排序

定义

排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。

1 冒泡排序

 原理:对于一个有n-1个元素的数组,通过相邻元素进行相互比较,如果前者大于后者(从小到大排序),就进行交换,重复n-1次。每次交换就会把当前还没排好序的元素中的最大值换到它数组尾部对应的位置。(从小到大排序)

 代码:

package SortingAlgorithm;

public class BubbleSortDemo {
    public static void main(String[] args) {
        int a[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12};
        BubbleSort(a,0,a.length-1);
        for(int i=0;i<=a.length-1;i++)
        System.out.print(a[i]+" ");


        int b[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12,56};
        System.out.println();
        BubbleSort(b,0,b.length-1);
        for(int i=0;i<=b.length-1;i++)
            System.out.print(b[i]+" ");
    }

//排序方法
    public  static  void  BubbleSort(int a[],int b,int c )   //参数: 要排序的数组,起始点,终点
    {

          for(int i=0;i<c-b;i++)  //执行n-1 次交换 ,b到c就执行c-b次
          {
              for(int j=b;j<c-i;j++) //一次交换排好一个数据,这个数据就不用参与交换了
              {
                  if(a[j]>a[j+1])
                  {
                      int temp=a[j];
                      a[j]=a[j+1];
                      a[j+1]=temp;
                  }



              }





          }


    }


    public  static  void BubbleSort2(int a[],int  b,int c)  //优化冒泡排序,如果有一次交换完全没发生数据的交换,那就说明排序完成了
    {
         boolean isChange=false;//记录是否发生了交换

        for(int i=0;i<c-b;i++)   //执行n-1 次交换 ,b到c就执行c-b次
        {
            for(int j=b;j<c-i;j++) //一次交换排好一个数据,这个数据就不用参与交换了
            {
                if(a[j]>a[j+1])
                {
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    isChange=true;
                }



            }

          if(!isChange)
          {
              break;//如果没发生交换,就退出
          }
          else {
              isChange=false; //重置isChange
          }


        }






    }
}

2 选择排序

原理:对于一个a[n]数组,第一次排序 :在 a[0]--a[n-1]中选择最小的元素与a[0] 交换 ,第二次排序:在a[1] --a[n-1]中选择最小元素与a[1]交换  第三次排序:在a[2]--a[n-1]中选择最小元素与a[2]交换...............第n-1次交换:在a[n-2]--a[n-1]中选择最小元素与a[n-2]交换。突出一个“交换”。(从小到大排序)

代码:

package SortingAlgorithm;

public class SelectSortDemo {
    public static void main(String[] args) {
        int a[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12};
        SelectSort(a,0,a.length-1);
        for(int i=0;i<=a.length-1;i++)
            System.out.print(a[i]+" ");
    }
    public  static  void SelectSort(int a[],int b,int c) //排序方法 参数 1 要排序的数组 2 起始点 3 终点
    {
        for(int i=b;i<=c-1;i++)
        {
            int temp=i;//记录最大值的下标
            for(int j=i+1;j<=c;j++) //在后面找最小值
            {
                if(a[j]<a[temp])
                    temp=j;

            }
            if(temp!=i) //找到更小的值就交换
            {
                int temp2=a[i];
                a[i]=a[temp];
                a[temp]=temp2;



            }


        }


    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值