黑马程序员技术交流社区

标题: 冒泡排序&选择排序(图解分析+代码实现) [打印本页]

作者: anyway1919    时间: 2015-9-8 00:36
标题: 冒泡排序&选择排序(图解分析+代码实现)

/*
规律:相邻元素比较,如果符合条件换位。
第一圈后最大的元素跑到了最右边,第一圈总共有数组的长度-1个元素参与比较
第二圈比较时少了一个元素参与比较,次大的出现在倒数第二的位置
一次类推,共需要比较数组长度length-1次!

代码实现:
*/
package com.itheima.sh.demo;

public class BubbleSort{
public static void main(String [] args){
     int []arr = {2,8,5,7,14,6};
     System.out.println("排序之前:");
     printArray(arr);
     bubbleSort(arr);
     System.out.println("排序之后:");
     printArray(arr);
   
         
}     //定义功能:冒泡排序
     public static void bubbleSort(int []arr){
          for(int i=0;i<arr.length-1;i++){
                    for(int j =0;j<arr.length-i-1;j++){//-i让每次参与的元素少一个;-1避免角标越界
                        //相邻元素比较
                         if(arr[j]>arr[j+1]){
                         int temp = arr[j];
                         arr[j]  = arr[j+1];
                         arr[j+1] = temp;
                      }
               }
     }
     }          //定义功能,打印数组
               public static void printArray(int [] arr){
                  for(int i =0;i<=arr.length-1;i++){
               System.out.print("arr["+i+"]="+arr+"\t");
          }
                  System.out.println();
     }
}
2,选择排序


/*
规律:第一圈0角标位上的值依次和后面的元素比较,第一圈结束时最小值出现在最左边;比较的次数数数组的长度-1(按照正序排列)
         第二圈1角标位上的值依次和后面元素比较,第二圈结束时,第二小的元素出现在1角标位置上。
          。。。。。。
代码实现:
*/
package com.itheima.sh.demo;

public class SelectSortDemo {

     public static void main(String[] args) {
          // 定义一个整形数组、
          int [] arr  = {9,6,4,1,8,7};
         
          System.out.println("排序之前:");
          printArray(arr);
          selectSort(arr);
          System.out.println("排序之后:");
          printArray(arr);
     }
     //定义功能
     public static void selectSort(int []arr){
          for (int i = 0; i < arr.length; i++) {
               //j =i+1保证每次循环开始,第一个元素都会和下一个元素比较,而不是和自己比较
               for (int j =i+ 1; j < arr.length; j++) {
                    if (arr>arr[j]) {
                         int temp =arr;
                         arr = arr[j];
                         arr[j] = temp;
                    }
               }
          }
     }
     //定义打印功能
     public static void printArray(int [] arr){
         for(int i =0;i<=arr.length-1;i++){
      System.out.print("arr["+i+"]="+arr+"\t");
       }
         System.out.println();
}

}

作者: zx0210    时间: 2015-9-8 00:57
老毕的视频里面有很详尽的讲解,总结出来随时都可以查阅,很赞!
作者: kevin986745    时间: 2015-9-8 07:59
学习了,还是很详细的!
作者: michael_wlq    时间: 2015-9-8 09:09
不错,记录下可以方便以后查阅
作者: 纳木错的程序猿    时间: 2015-9-8 09:23
经典的问题记录下,这样的方法不错,值得借鉴
作者: yangshibai    时间: 2015-9-8 15:08
多谢分享
作者: 迷茫不堪的年纪    时间: 2015-9-8 16:38
我的赶紧学了, 搞得现在有的东西看不懂了
作者: changyunyun    时间: 2015-9-8 16:46
学习学习
作者: 小二儿    时间: 2015-9-8 18:21
有图有总结有代码,很不错哦,加油
作者: a80C51    时间: 2015-9-8 18:39
挺好的资料。学习下。。。。。
作者: 洋葱头头    时间: 2015-9-8 18:53
吓的我赶紧学习了一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2