您的位置:首页 > 编程语言 > Java开发

java实现选择排序

2017-07-04 10:00 330 查看
选择排序的思想很简单:

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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: