冒泡算法的运作规律如下:

  ①、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  ②、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成)。

  ③、针对所有的元素重复以上的步骤,除了最后一个。

  ④、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 1 public class BubbleSort {
 2     public static int[] sort(int[] array){
 3         int i;//这个i控制需要比较多少轮,并且可在外面输出第i轮结果
 4         for (i=1;i<array.length;i++) {  //i从第一轮开始
 5             boolean flag = true;    //设一个标记,若下面的for循环未排序 则打断
 6             for (int j = 0; j < array.length - i; j++) { //j从0开始,就是下标0,第一号元素
 7                 if (array[j] > array[j + 1]) {  //if语句只要比后面的元素大就交换(每次都是一号元素和后面的比)
 8                     int temp = array[j];
 9                     array[j] = array[j + 1];
10                     array[j + 1] = temp;
11                     flag = false;
12                 }
13             }
14             if (flag) {
15                 break;
16             }
17             System.out.print("第" + i + "轮的结果为:");
18             display(array); //这里还在第一层for循环里
19         }
20         return array;
21     }
22 
23     static void display(int[] array){  //静态方法 可直接调用  数组遍历
24         for (int i=0;i<array.length;i++){
25             System.out.print(array[i]+" ");
26         }
27         System.out.println();
28     }
29 }

Test:

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         //随机一组数组
 5         int[] array={1,6,4,8,7,9,3,5,2,0};
 6         System.out.print("未排序的数组为:");
 7         //排序数组
 8         BubbleSort.display(array);
 9         System.out.println("***-----------***");
10         BubbleSort.sort(array);
11     }
12 }

结果为:

 

 

 

选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

  分为三步:

  ①、从待排序序列中,找到关键字最小的元素

  ②、如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换

  ③、从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束

代码如下:

 1 public class ChoiceSort {
 2     public static int[] sort(int[] array){
 3         for (int i=0;i<array.length-1;i++){ //比较轮数 i初始为0是为了从下标0开始比大小
 4             int min=i;               //记录最小数的下标
 5             for (int j=i+1;j<array.length;j++){ //j初始i+1是i后面的所有元素与i进行一次比较
 6                 if (array[j]<array[min]){
 7                     min=j;    //如果有比min=i更小的数交换下标
 8                 }
 9             }
10             if (i!=min){  //循环结束i与min不相等就是有更小的数
11                 int temp=array[i];
12                 array[i]=array[min];
13                 array[min]=temp;
14             }
15             System.out.print("第"+(i+1)+"轮结果为:");
16             display(array);
17         }
18         return array;
19     }
20 
21     27 }

Test:

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         //随机一组数组
 5         int[] array={1,6,4,8,7,9,3,5,2,0};
 6         System.out.print("未排序的数组为:");
 7         //排序数组
 8         ChoiceSort.display(array);
 9         System.out.println("***-----------***");
10         ChoiceSort.sort(array);
11     }
12 }

 

3.(直接)插入排序

 直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。

 

 1 package array;
 2 
 3 public class InsertSort {
 4     public static int[] sort(int[] array) {
 5         int j;
 6         for (int i = 1; i < array.length; i++) {
 7             int temp = array[i];  //记录要插入的数据
 8             j = i;
 9             while(j>0&&temp<array[j-1]) {  //从插入数据的左边逐次往前比大小
10                 array[j] =array[j-1];   //若前面的数值大则往后挪
11                 j--;
12             }
13             array[j] = temp;  //一直到没有比temp更大的数,插入  此时j已经是往前挪动几步
14             System.out.print("第" + i + "轮的结果为:");
15             display(array);
16         }
17         return array;
18     }
19 
20     static void display(int[] array) {  //静态方法 可直接调用  数组遍历
21         for (int i = 0; i < array.length; i++) {
22             System.out.print(array[i] + " ");
23         }
24         System.out.println();
25     }
26 }

Test:

 

 1 package array;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         //随机一组数组
 6         int[] array = {1, 6, 4, 8, 7, 9, 3, 5, 2, 0};
 7         System.out.print("未排序的数组为:");
 8         //排序数组
 9         InsertSort.display(array);
10         System.out.println("***-----------***");
11         InsertSort.sort(array);
12     }
13 }

 

 

posted on 2018-08-22 15:32  蓝绿绿  阅读(137)  评论(0编辑  收藏  举报