5.9数组选择排序

Posted Java学习零基础

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.9数组选择排序相关的知识,希望对你有一定的参考价值。


前面5.5我们写了一次数组的排序,前面讲的是调用Arrays类的方法来进行排序,和冒泡排序。今天我们写另外的一种数组排序选择排序




都是排序谁的效率会更高呢?等会我们会用代码来解答。

选择基本原理如下:对于确定的一个数组,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,知道进行比较的记录只剩下一个为止。

先看使用方法:


public class Test {

public static void main(String[] args){

int[] arr={11,33,29,65,88,36,12};

System.out.println("交换之前:");

for(int num:arr){

System.out.print(num+" ");

}  

System.out.println();

//选择排序的优化

for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序

for(int j = i + 1; j < arr.length; j++){// 选最小的记录

if(arr[j] < arr[i]){ 

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

System.out.println("交换之后:");

for(int num:arr){

System.out.print(num+" ");

}

}


现在我们比较一下哪个代码效率更高。

首先是选择排序:


public class Test {

public static void main(String[] args){

int[] arr={11,33,29,65,88,36,12};

int a=0;

int b=0;

for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序

for(int j = i + 1; j < arr.length; j++){// 选最小的记录

if(arr[j] < arr[i]){ 

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

a++;

}

b++;

}

}

System.out.println("交换"+a+"次");

System.out.println("比较"+b+"次");

for(int num:arr){

System.out.print(num+" ");

}

}


现在是冒泡排序:


public static void main(String[] args){

int[] arr={11,33,29,65,88,36,12};

int a=0;

int b=0;

for(int i = 0; i < arr.length - 1; i++) {

for(int j = 0; j < arr.length-1; j++){

if(arr[j] > arr[j+1]){ 

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

a++;

}

b++;

}

}

System.out.println("交换"+a+"次");

System.out.println("比较"+b+"次");

for(int num:arr){

System.out.print(num+" ");

}

}


结果来了:




显而易见选择排序效率更高 如果是数组比较长,对比更明显。


以上是关于5.9数组选择排序的主要内容,如果未能解决你的问题,请参考以下文章

数组排序之选择排序

排序--选择排序Selection Sort Java实现

20191209-八大排序之选择排序

算法通关手册 刷题笔记2 数组排序之冒泡排序选择排序

数组排序(冒泡排序,选择排序)

这才是选择排序正确的打开方式