排序算法常用的有冒泡排序,选择排序和插入排序,下面将用java语言实现这三种排序方式,并且介绍一种由插入排序拓展出来的希尔排序。
1、冒泡排序(bubblesort)是一种最简单的排序算法。它的基本思想是迭代地对输入序列的第一个元素到最后一个元素进行俩俩比较,当满足条件时交换这俩个元素的位置,该过程持续到不需要执行上述过程的条件时。
2、我们自定义一个排序的函数为sorter(int[]array);
1
|
private static void sorter( int [] array) for ( int i= 0 ;i<array.length- 1 ;i++) { for ( int j= 0 ;j<array.length-i- 1 ;j++) { if (array[j]>array[j+ 1 ]) { int temp = array[j]; array[j] = array[j+ 1 ]; array[j+ 1 ] = temp; } } } } |
完整代码如下图:
3、运行结果如下:
1、选择排序
选择排序(selectsort)是一种原地(in-place)排序算法,适用于小文件。选择排序是基于键值并且交换是发生在需要交换时才执行,所以选择排序常用于数值较大和键值较小文件。
2、
1
|
private static void sorter( int [] array) for ( int i= 0 ;i<array.length- 1 ;i++) { int index = i; for ( int j=index;j<array.length- 1 ;j++) { if (array[index]>array[j+ 1 ]) { index = j+ 1 ; } } int temp = array[index]; array[index] = array[i]; array[i] = temp; } } |
3、运行结果
1、插入排序
插入排序(insertionsort)是一种简单且有效的比较排序算法,在每次迭代过程中算法随机的从输入序列中移除一个元素,并将该元素插入到排序序列中正确的位置,重复该过程,知道所有元素都被选择一次。
2、
1
|
private static void sorter( int [] array) for ( int i= 1 ;i<array.length;i++) { int temp = array[i]; int j = i; while (j> 0 &&temp<array[j- 1 ]) { array[j] = array[j- 1 ]; j--; } array[j] = temp; } } |
3、运行结果
1、希尔排序
希尔排序(shellsort)又称缩小增量排序,该算法是一个泛化的插入排序。
2、
1
|
public static void sorter( int []array) { for ( int gap=array.length/ 2 ;gap> 0 ;gap/= 2 ) { for ( int i=gap;i<array.length;i++) { int temp = array[i]; int j = i; if (array[j]<array[j- 1 ]) { while (j-gap>= 0 &&temp<array[j-gap]) { array[j] = array[j-gap]; j-=gap; } array[j] = temp; } } } } |
3、运行结果