选择排序算法与冒泡排序算法

选择排序算法与冒泡排序算法

1.     选择排序算法(Selection Sort)

选择排序分为直接选择排序,树形选择排序(锦标赛排序)和堆排序。这里只介绍最简单的直接选择排序。

 

直接选择排序的算法思想是:(设共有n个元素进行排序)

第一轮先n个元素进行比较,最终将这n个元素的最大值/最小值放在最前/最后

第二轮再对接下来的n-1个元素进行比较,从中选出最大值/最小值放在最前/最后

以此类推,经过n-1伦的比较完成排序

 

示例:对数组int arr[] = { 1,5,-8,46,6,74,78,20}进行排序,以升序为例

                  1  5  -8  46  6  74  78  20

第一轮:   -8  5  1  46   6  74  78  20

第二轮:         1  5  46  6  74  78  20

第三轮:             5  46  6  74  78  20

第四轮:                  6  46 74  78  20

第五轮:                      20  74 78  46

第六轮:                            46  78  74

第七轮:                                  74  78

 

代码展示:                                      

class sortBySelect{                            
    public static voidmain(String[] args){
             int[] arr = new int[]{1,5,-8,46,6,74,78,20};
             for(int i=0;i<arr.length-1;i++){
                      for(intj=i;j<arr.length-1;j++){
                               if(arr[i]>arr[j+1]){
                                       inttemp = arr[j+1];
                                       arr[j+1]= arr[i];
                                       arr[i]= temp;
                               }
                      }
             }
             for(int i=0;i<arr.length;i++){
                      System.out.print(arr[i]+",");
             }
    }
}

运行结果:


2.     冒泡排序算法(Selection Sort)

冒泡排序算法的算法思路是:(以升序为例)

从第一个元素开始进行两两比较,如果前面的值大于后面的值则交换两元素的位置;依次经过n-1伦的比较后,最大值依次被排列在最后,最终实现升序的排序。

 

示例:对数组int arr[] = { 1,5,-8,46,6,74,78,20}进行排序,以升序为例

                1   5  -8  46  6  74  78  20

第一轮:  1  -8   5   6  46  74  20  78

第二轮:  -8  1  5   6  46   20  74      

第三轮:  -8  1  5   6  20   46        

第四轮:  -8  1  5   6  20

第五轮:  -8  1  5   6

第六轮:  -8  1  5

第七轮:  -8  1

代码展示:                                      

class sortByBubble {
         publicstatic void main(String[] args) {
                  int[]arr = new int[] { 2, 34, 123, 3, 314, 4, 3, 6, 2, -3, 9 };
                  sortByBubble(arr);
         }
         publicstatic void sortByBubble(int[] a) {
                  intlength = a.length;
                  for(int i = 0; i < length - 1; i++) {
                          for(int j = 0; j < length - 1 - i; j++) {
                                   if(a[j] < a[j + 1]) {
                                            inttemp = a[j];
                                            a[j]= a[j + 1];
                                            a[j+ 1] = temp;
                                   }
                          }
                  }
                  for(int i = 0; i < length; i++) {
                          System.out.print(a[i]+ ",");
                  }
         }
}

运行结果:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值