java实现选择排序

来源:互联网 发布:淘宝买家如何删除评价 编辑:程序博客网 时间:2024/05/19 04:02

选择排序的思想很简单:

1.程序将记录定位在第1个数据上,拿第1个数据和它后面的每个数据进行比较,如果第一个数据大于后面某个数据,交换它们。

2.程序将记录定位在第2个数据上,拿第2个数据和它后面的每个数据进行比较,如果第一个数据大于后面某个数据,交换它们。

3.程序将记录定位在第3个数据上,拿第3个数据和它后面的每个数据进行比较,如果第一个数据大于后面某个数据,交换它们。

一直到最后一个元素结束,整个数据列就成顺序了的。

public static void main(String[] args) {int[] data = { -1, -5, 4, 2, 0, 3, -55 };printArray(data);// selectSort(data);betterSelectSort(data);printArray(data);}

public static void printArray(int[] data) {System.out.print("[");for (int i = 0; i < data.length; i++) {if (i != data.length - 1) {System.out.print(data[i] + ",");} else {System.out.println(data[i] + "]");}}}

public static void selectSort(int[] data) {for (int i = 0; i < data.length - 1; i++) {for (int j = i + 1; j < data.length; j++) {if (data[i] > data[j]) {swap(data, i, j);}}}}

public static void swap(int[] data, int i, int j) {int temp = data[i];data[i] = data[j];data[j] = temp;}

输出结果:

[-1,-5,4,2,0,3,-55][-55,-5,-1,0,2,3,4]

对于上面算法的实现,有一个很大的问题,程序一旦发现某个数据比第1个数据小,立即交换。但是很有可能,后面有比第1个数据的值更小的,所以优化的思想在于:用一个角标记录最小的,最后在交换。这样就减少了交换次数,提高了效率。
public static void betterSelectSort(int[] data) {for (int i = 0; i < data.length - 1; i++) {int miniIndex = i; //定义角标for (int j = i + 1; j < data.length; j++) {if (data[miniIndex] > data[j]) {miniIndex = j;  //找到比第1个数据小的值,就交换角标。}}if (miniIndex != i) {swap(data, miniIndex, i);}}}





原创粉丝点击