选择排序

JAVA学习网 2020-11-09 00:37:01

选择排序算法的原理是找到数组中最小的元素,然后将它和数组第一个元素交换,接着在剩下的元素中找到最小的元素,接着和数组第二个元素交换,以此类推,直到将所有元素排序完毕

简单实现如下:

 1 package 选择排序;
 2 
 3 public class DemoMain {
 4     public static void main(String[] args) {
 5         Integer[] a = {5, 2, 6, 3, 4, 7};
 6         sort(a);
 7         System.out.println(isSorted(a));
 8         show(a);
 9     }
10 
11     /**
12      * 排序
13      * @param a 排序的数组
14      */
15     public static void sort(Comparable[] a) {
16         for (int i = 0; i < a.length - 1; i++) {
17             //获取当前要交换元素的下标
18             int index = i;
19             //找到最小的元素,将下标赋值给index
20             for (int j = i + 1; j < a.length; j++) {
21                 if (less(a[index], a[j])) {
22                     index = j;
23                 }
24             }
25             //传递要交换的元素的下标i和最小值的下标index
26             exch(a, i, index);
27         }
28     }
29 
30     /**
31      * 比较大小,v > w的值大于0
32      * 使用compareTo是因为引用类型实现了Comparable接口
33      * @param v 排序方法中传递的参数1
34      * @param w
35      * @return  返回判断结果
36      */
37     private static boolean less(Comparable v, Comparable w) {
38         return v.compareTo(w) > 0;
39     }
40 
41 
42     /**
43      * 交换位置
44      * @param a 数组
45      * @param i 两个交换元素的下标
46      * @param j
47      */
48     private static void exch(Comparable[] a, int i, int j) {
49         Comparable temp;
50         temp = a[i];
51         a[i] = a[j];
52         a[j] = temp;
53     }
54 
55     /**
56      * 显示数据
57      * @param a
58      */
59     private static void show(Comparable[] a) {
60         for (int i = 0; i < a.length; i++) {
61             if (i == a.length - 1) {
62                 System.out.print(a[i]);
63             } else {
64                 System.out.print(a[i] + ",");
65             }
66         }
67     }
68 
69     /**
70      * 简单的判断是否排序成功
71      * @param a 排序后的数组
72      * @return  返回一个bool值
73      */
74     private static boolean isSorted(Comparable[] a) {
75         for (int i = 0; i < a.length - 1; i++) {
76             if (less(a[i], a[i + 1])) {
77                 return false;
78             }
79         }
80         return true;
81     }
82 }

 

阅读(2388) 评论(0)