数组排序常见的几种算法

1.冒泡排序

冒泡排序的基本思想就是对比相邻的元素值,如果满足条件就交换元素值,把小的放前面,把大的放后面。
其算法由两层循环实现,外层循环控制排序次数,一般为排序的数组的长度减1,内层循环主要用于比较相邻元素的大小,以判断是否交换位置。内层的对比次数随着外层排序的次数的增加而减少。代码如下

public class test4 {
	@Test
	public void test1() {
		//创建一个数组
		int[] array= {63,4,24,1,3,15};
		//创建冒泡排序类的对象
		test4 sorter = new test4();
		//调用排序方法将数组排序
		sorter.sort(array);
	}
	/**
	 * 冒泡排序
	 * @param array	要排序的数组
	 */
	public void sort(int[] array) {
		for(int i=1;i<array.length;i++) {
			//比较相邻两个元素,较大的数往后冒泡
			for(int j=0;j<array.length-i;j++) {
				if(array[j]>array[j+1]) {
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		//输出冒泡排序后的数组元素
		showArray(array);
	}
	/**
	 * 显示数组中的所有元素
	 * @param array	要显示的数组
	 */
	public void showArray(int[] array) {
		for(int i:array) {
			System.out.print(">"+i);
		}
		System.out.println();
	}
}

2.直接选择排序

直接选择排序的基本思想是将排序位置与其他数组元素一一对比,如果满足条件就交换元素值,这样每次排序都是取得的是剩余数组中最大的元素,再按照顺序摆放。直接选择排序与冒泡排序相比交换的次数要少很多,所以速度会快些。代码如下:

public class SelectSort {
	public static void main(String[] args) {
		//创建一个数组,这个数组元素是乱序的
		int[] array = {63,4,24,1,3,15};
		//创建直接排序类的对象
		SelectSort sorter = new SelectSort();
		//调用排序对象的方法将数组排序
		sorter.sort(array);
	} 
	/**
	 * 直接选择排序
	 * @param array	要排序的数组
	 */
	public void sort(int[] array) {
		int index;
		for(int i=1;i<array.length;i++) {
			index=0;
			for(int j=1;j<=array.length-i;j++) {
				if(array[j]>array[index]) {
					index = j;
				}
			}
			//交换在位置array.length-i和index(最大值)上的两个数
			int temp = array[array.length-i];
			array[array.length-i] = array[index];
			array[index] = temp;
		}
		showArray(array);
	}
	public void showArray(int[] array) {
		for(int i:array) {
			System.out.print(">"+i);
		}
		System.out.println();
	}
}

3.反转排序

反转排序就是以相反的顺序把原有的数组的内容重新排序。反转排序的思想就是把第一个元素与最后一个元素交换,第二个与倒数第二个交换,依此类推。实际循环次数为数组长度的一半。

public class ReverseSort {
	public static void main(String[] args) {
		//创建一个数组
		int[] array = {10,20,30,40,50,60};
		//创建反转排序类的对象
		ReverseSort sorter = new ReverseSort();
		//调用排序对象的方法将数组反转
		sorter.sort(array);
	}
	/**
	 * 反转排序
	 * @param array	要排序的数组
	 */
	public void sort(int[] array) {
		System.out.println("数组原有内容:");
		showArray(array);
		int temp;
		int len = array.length;
		for(int i=0;i<len/2;i++) {
			temp = array[i];
			array[i] = array[len-1-i];
			array[len-1-i] = temp;
		}
		System.out.println("数组反转后内容:");
		showArray(array);
	}
	/**
	 * 显示数组中的所有元素
	 * @param array	要显示的数组
	 */
	public void showArray(int[] array) {
		for(int i:array) {	//遍历数组
			System.out.print("\t"+i);	//输出每个数组元素值
		}
		System.out.println();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37225699/article/details/85085535