A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先,看下两种排序的示意图:
选择排序:


冒泡排序:


选择排序的思:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。

冒泡排序的思想:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。
同样数据的情况下,2种算法的循环次数是一样的,但选择排序只有0到1次交换,而冒泡排序只有0到n次交换,选择排序的平均时间复杂度比冒泡排序的稍低。
  1. import java.util.*;
  2. /*
  3.     对给定数组进行排序。
  4.         {5,1,6,4,2,8,9}
  5. */
  6. class ArrayTest2
  7. {
  8.         /*
  9.           选择排序。
  10.           内循环结束一次,最值出现头角标位置上。
  11.         */
  12.         public static void selectSort(int[] arr)
  13.         {
  14.                 for (int x=0; x<arr.length-1 ; x++)
  15.                 {
  16.                         for(int y=x+1; y<arr.length; y++)
  17.                         {
  18.                                 if(arr[x]>arr[y])
  19.                                 {
  20.                                         /*
  21.                                         int temp = arr[x];
  22.                                         arr[x] = arr[y];
  23.                                         arr[y]= temp;
  24.                                         */
  25.                                         swap(arr,x,y);
  26.                                 }
  27.                         }
  28.                 }
  29.         }

  30.         /*
  31.            冒泡排序
  32.         */
  33.         public static void bubbleSort(int[] arr)
  34.         {
  35.                 for(int x=0; x<arr.length-1; x++)
  36.                 {                                                                       
  37.                         for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
  38.                         {
  39.                                 if(arr[y]<arr[y+1])
  40.                                 {
  41.                                         /*
  42.                                         //封装成一个单独的方法
  43.                                         int temp = arr[y];
  44.                                         arr[y] = arr[y+1];
  45.                                         arr[y+1] = temp;
  46.                                         */
  47.                                         swap(arr,y,y+1);
  48.                                 }
  49.                         }
  50.                 }
  51.         }

  52.         /*
  53.         发现无论什么排序。都需要对满足条件的元素进行位置置换。
  54.         所以可以把这部分相同的代码提取出来,单独封装成一个函数。
  55.         */
  56.         public static void swap(int[] arr,int a,int b)
  57.         {
  58.                 int temp = arr[a];
  59.                 arr[a] = arr[b];
  60.                 arr[b] = temp;
  61.         }
  62.         public static void main(String[] args)
  63.         {
  64.                 int[] arr = {5,1,6,4,2,8,9};
  65.                 //排序前;
  66.                 printArray(arr);

  67.                 //排序
  68.                 //selectSort(arr);
  69.                 //bubbleSort(arr);

  70.                 //Arrays.sort(arr);//java中已经定义好的一种排序方式。开发中,对数组排序。要使用该句代码。

  71.                 //排序后:
  72.                 printArray(arr);
  73.                        
  74.         }

  75.     //打印数组中的元素
  76.         public static void printArray(int[] arr)
  77.         {
  78.                 System.out.print("[");
  79.                 for(int x=0; x<arr.length; x++)
  80.                 {
  81.                         if(x!=arr.length-1)
  82.                                 System.out.print(arr[x]+", ");
  83.                         else
  84.                                 System.out.println(arr[x]+"]");

  85.                 }               
  86.         }
  87. }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马