本帖最后由 小棽 于 2015-1-21 18:48 编辑
冒泡排序是从第一个开始跟后面比较,如果后面一个比第一个大就交换,接着第二个继续和第三个比较,如果第三个比第二个大,继续交换,以此类推。每一次排序的结果都会把最大的往后面排,直到排序结束。
选择排序是将第一个与后面的每一个值比较,比如第一次与第二个比较,如果大就交换两个数值的位置,然后继续用第一个与三个继续比较,第三个比第一个大就交换位置,反之,就不交换;继续用第一个与后面的比较,以此类推,
下次循环的时候就用第二个与后面的比较,反复前面的比较步骤,直到所有排序结束
不同:冒泡排序每一次的结果是把大的往后面移,选择排序是把小的往前移。
最后我附上代码,你比较一下吧(置换位置的代码还能提取出来重构成单独的方法,减少代码量)
- public class Sort {
- public static void main(String[] args) {
- bubbleSort();
- System.out.println("--------------------");
- selectSort();
-
- }
- //冒泡排序
- public static void bubbleSort(){
- int[] arr = {49,56,12,87,30,25,14}; //定义一个未排序的数组
- System.out.print("进行未排序前的遍历:");
- printArray(arr); //遍历数组
- System.out.println();
- for(int i = 0; i < arr.length; i++){
- for(int j = 0; j < arr.length - 1 - i; j++){//没排序完一次,最大的就在最后面,所以不需要再比较,每次就少比较i次
- if(arr[j] > arr[j+1]){ //如果前面一个元素比后面一个元素大,就交换位置
- int temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- }
- }
- System.out.print("第"+(i+1)+"次的结果为:");
- printArray(arr); //遍历每一次排序的结果
- System.out.println();
- }
-
- }
- //选择排序
- public static void selectSort(){
- int[] arr = {49,56,12,87,30,25,14};
- System.out.print("进行未排序前的遍历:");
- printArray(arr); //遍历数组
- System.out.println();
- for(int i = 0; i < arr.length; i++){
- for(int j = i+1; j < arr.length; j++){
- if(arr[i] > arr[j]){
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- System.out.print("第"+(i+1)+"次的结果为:");
- printArray(arr); //遍历每一次排序的结果
- System.out.println();
- }
- }
- //打印数组
- public static void printArray(int[] arr){
- System.out.print("["+arr[0]+",");
- for(int i = 1; i < arr.length; i++){
- if( i != arr.length - 1){
- System.out.print(arr[i]+",");
- }else{
- System.out.print(arr[i]+"]");
- }
- }
- }
- }
复制代码 |