一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java對數組實現選擇排序算法的實例詳解

Java對數組實現選擇排序算法的實例詳解

2020-04-17 11:21匆忙擁擠repeat JAVA教程

這篇文章主要介紹了Java對數組實現選擇排序算法的實例,選擇排序的比較次數為 O(N^2)而交換數為O(N),需要的朋友可以參考下

一. 算法描述
    選擇排序:比如在一個長度為N的無序數組中,在第一趟遍歷N個數據,找出其中最小的數值與第一個元素交換,第二趟遍歷剩下的N-1個數據,找出其中最小的數值與第二個元素交換......第N-1趟遍歷剩下的2個數據,找出其中最小的數值與第N-1個元素交換,至此選擇排序完成。
以下面5個無序的數據為例:
56 12 80 91 20(文中僅細化了第一趟的選擇過程)
第1趟:12 56 80 91 20

Java對數組實現選擇排序算法的實例詳解

第2趟:12 20 80 91 56
第3趟:12 20 56 91 80
第4趟:12 20 56 80 91
二. 算法分析
平均時間復雜度:O(n2)
空間復雜度:O(1)  (用于交換和記錄索引)
穩定性:不穩定 (比如序列【5, 5, 3】第一趟就將第一個[5]與[3]交換,導致第一個5挪動到第二個5后面)
三. 算法實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class SelectionSort {
  public static void main(String[] args) {
    int len = 15;
    int[] ary = new int[len];
    Random random = new Random();
    for (int j = 0; j < len; j++) {
      ary[j] = random.nextInt(1000);
    }
    System.out.println("-------排序前------");
//   ary=new int[]{10,9,8,7,6,5,4,3,2,1}; //測試交換次數
//   ary=new int[]{1,2,3,4,5,6,7,8,10,9}; //測試交換次數
    for (int j = 0; j < ary.length; j++) {
      System.out.print(ary[j] + " ");
    }
     
    selectDesc(ary);
    selectAsc(ary);
  }
  /*
   * 選擇排序:降序
   */
  static void selectDesc(int[] ary) {
    int compareCount = 0;//比較次數
    int changeCount = 0;//交換次數
    int len = ary.length;
    int maxValueIndex = -1; //記錄一輪比較下來的最小值索引
    for (int i = 0; i < len - 1; i++) {
      maxValueIndex = i; //從0開始
      for (int j = i + 1; j < len; j++) {
        if (ary[maxValueIndex] < ary[j]) {
          maxValueIndex = j; //記錄較大的索引
          compareCount++;
        }
      }
//     System.out.println("minValueIndex==" + maxValueIndex);
      if (maxValueIndex != i) {//如果跟左邊的記錄索引不同,則交換
        ary[i] = ary[maxValueIndex] + (ary[maxValueIndex] = ary[i]) * 0;//一步交換
        changeCount++;
      }
    }
     
    System.out.println("\n-------降序排序后------比較次數:" + compareCount + ",交換次數" + changeCount);
    for (int j = 0; j < ary.length; j++) {
      System.out.print(ary[j] + " ");
    }
  }
   
  /*
   * 選擇排序:升序
   */
  static void selectAsc(int[] ary) {
    int compareCount = 0, changeCount = 0;
    int len = ary.length;
    int minIndex = -1;
    for (int i = 0; i < len - 1; i++) {
      minIndex = i;
      for (int j = i + 1; j < len; j++) {
        if (ary[minIndex] > ary[j]) {
          minIndex = j; //記錄較小的索引
          compareCount++;
        }
      }
      if (minIndex != i) {//如果跟左邊的記錄索引不同,則交換
        ary[i] = ary[minIndex] + (ary[minIndex] = ary[i]) * 0;
        changeCount++;
      }
    }
    System.out.println("\n-------升序排序后------比較次數:" + compareCount + ",交換次數" + changeCount);
    for (int j = 0; j < ary.length; j++) {
      System.out.print(ary[j] + " ");
    }
  }
}

打印

?
1
2
3
4
5
6
-------排序前------
125 350 648 789 319 699 855 755 552 489 187 916 596 731 852 
-------降序排序后------比較次數:26,交換次數13
916 855 852 789 755 731 699 648 596 552 489 350 319 187 125 
-------升序排序后------比較次數:56,交換次數7
125 187 319 350 489 552 596 648 699 731 755 789 852 855 916 

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色老板视频在线观看 | 日韩 欧美 国产 亚洲 中文 | 美女污视频 | 美女全身无遮挡 | 欧美日韩一区二区三区免费 | 亚洲mv国产精品mv日本mv | 9久热久爱免费精品视频在线观看 | 91国语精品自产拍在线观看一 | 亚洲成在人线视频 | 精品国产一区二区三区在线观看 | 国产欧美va欧美va香蕉在线观 | 午夜性爽视频男人的天堂在线 | 亚洲AV 日韩 国产 有码 | 日本春菜花在线中文字幕 | 91久久青青青国产免费 | 精品国产一区二区三区久久久狼 | 国产精品久久久精品视频 | 奶茶视频有容乃大 | 亚洲国产日韩成人综合天堂 | 男人天堂中文字幕 | 国产91精品久久久久久 | 日本在线观看视频网站 | 99ri在线精品视频 | 欧美白虎逼 | 完整秽淫刺激长篇小说 | 本站只有精品 | 99av涩导航 | 夫妻性生活免费在线观看 | 免费视频精品一区二区 | 天码毛片一区二区三区入口 | 俄罗斯大白屁股 | tk白嫩玉足脚心vk | 高h喷水荡肉爽文np肉色文 | 色老板最新网站视频地址 | 国产精品香蕉 | 免费观看欧美性一级 | 2022最新a精品视频在线观看 | www.97cao| 亚洲天堂2015 | 91免费精品国自产拍在线可以看 | 欧美1 |