排序现在已学的有两种,冒泡排序(BubbleSort)和选择排序(SelectionSort),两种方法各有不同;
冒泡排序
冒泡排序是将数组中的元素进行逐一比较,并将两者比较之后的较大值与后面第三位元素进行比较。进行循环后,第一次可得到数组中的最大值,且最大值在数组的最后一个位置上。
通过JAVA进行实现的大概思路是:将第一位元素与第二位进行比较,将较大值赋给第二位元素,较小值赋给第一位元素,然后再将第二位元素与第三位元素进行比较,照此进行循环,最终可将最大数移至数组最后一位。
进行第二次运算,则使用相同的计算方式,得到第二大的元素,并赋予给倒数第二个元素。
进行运算后,可得到顺序排列的数组。
因此,冒泡排序要实现排序,如果有一个数组有N个元素,需要经过N!次,才能得到顺序排列的数组,且每次循环都要进行数组调换,大大影响了排序性能。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//冒泡排序的算法
class BubbleSort
{
public static void main(String[] args)
{
int[] arr = {2 ,6 ,9 ,1 ,4 ,7};
int a;
for ( int i = 0; i < arr.length-1 ; i++ )
{
for ( int j = 0 ; j < arr.length-1-i ; j++ )
{
if ( arr[j] > arr[j+1])
{
a = arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}
String PrintArr = "["; //打包成字符输出
for ( int i = 0; i < arr.length ; i++ )
{
PrintArr = PrintArr + arr[i];
if ( i == arr.length-1 )
{
break;
}
PrintArr = PrintArr + ",";
}
PrintArr = PrintArr + "]";
System.out.println(PrintArr);
}
}
选择排序
选择排序的方法是将数组中的第一个元素和数组的其他元素逐一进行比较,将比较之后的较小值赋予给第一个元素。遍历一次后,数组的第一个元素可获得数组中的最小值。
第二次遍历从第三个元素开始,将其与第二个元素进行比较,较小值赋予给第二个元素。
以此类推,可知选择排序的比较次数依旧为N!次。但选择排序时不需将元素进行多次的调换,因此性能方面较冒泡排序有些许提升。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//选择排序的算法
class SelectionSort
{
public static void main(String[] args)
{
int[] arr = {2 ,6 ,9 ,1 ,4 ,7};
int a;
for ( int i = 0; i< arr.length ; i++ )
{
for ( int j = i; j < arr.length ; j++ )
{
if ( arr[i] > arr[j] )
{
a = arr[i];
arr[i] = arr[j];
arr[j] = a;
}
}
}
String PrintArr = "["; //打包成字符输出
for ( int i = 0; i < arr.length ; i++ )
{
PrintArr = PrintArr + arr[i];
if ( i == arr.length-1 )
{
break;
}
PrintArr = PrintArr + ",";
}
PrintArr = PrintArr + "]";
System.out.println(PrintArr);
}
}
选择排序还可进行算法优化,每次遍历只与便利到的最小值进行交换,这样可以再减少一些数值交换次数,但笔者尚未实现,待实现完毕再更新。