Java数据结构--简单排序

Java数据结构–简单排序

简单排序是最基本的三种排序方式,包括了冒泡排序、选择排序、插入排序;其中,优化插入排序之后得到了希尔排序。

代码架构

简单排序可通过三个方法都能够很好地实现代码运行,当然也能够直接在一个方法内部构建完毕,多个方法体会看起来更有层次感,简单易懂。

函数名意义
sort(Comparable[] a)sort函数用来排列数组A中数据,也是整个的核心代码块。
greater(Comparable v, Comparable w)greater函数能够比较其中元素的值,返回boolean类型结构来判断。
exch(Comparable[] a, int i, int j)exch函数能够交换数组中两个数据的下标位置。

1.冒泡排序

每轮排序将最大数据检索(比较相邻元素,大的排后)出来并排至最后端,例如:
冒泡排序
根据冒泡排序规则,建立两个循环,即可完成,代码如下:

    /*
	 * 对数组A中数据进行排序
	 */
	public static void sort(Comparable[] a) {
		for (int i = a.length - 1; i > 0; i--) {
			for (int j = 0; j < i; j++) {
				if (greater(a[j], a[j + 1])) {
					exch(a, j, j + 1);
				}
			}
		}
	}

	/*
	 * 比较v元素是否大于w元素
	 */
	public static boolean greater(Comparable v, Comparable w) {
		return v.compareTo(w) > 0;
	}

	/*
	 * 交换元素在数组中的位置
	 */
	public static void exch(Comparable[] a, int i, int j) {
		Comparable num;
		num = a[i];
		a[i] = a[j];
		a[j] = num;
	}

上面代码在最好情况下时间复杂度为:O(n),最坏情况下为O(n2),平均为O(n2)

2.选择排序

每轮寻找最小处索引,交换第一个与最小处索引位置,例如:
选择排序

定义一个参数来存储最小值索引,完成与前端索引进行交换

    /*
	 * 对数组A中数据进行排序
	 */
	public static void sort(Comparable[] a) {
		for (int i = 0; i <= a.length - 2; i++) {
			int index = i;
			for (int j = i + 1; j <= a.length - 1; j++) {
				if (greater(a[index], a[j])) {
					index = j;
				}
			}
			exch(a, i, index);
		}
	}

	/*
	 * 比较v元素是否大于w元素
	 */
	public static boolean greater(Comparable v, Comparable w) {
		return v.compareTo(w) > 0;
	}

	/*
	 * 交换元素在数组中的位置
	 */
	public static void exch(Comparable[] a, int i, int j) {
		Comparable num;
		num = a[i];
		a[i] = a[j];
		a[j] = num;
	}

上面代码在最好情况下时间复杂度为:O(n2),最坏情况下为O(n2),平均为O(n2)

3.插入排序

插入排序则是将整个数组分为两部分,已排序和未排序,每轮将一个元素往前放置合适位置,例如:
插入排序
代码编写思路:围绕三个方法进行整体排序,主要运行方法放置双层循环,外循环表示每次进入排序,内循环将排序数据放置相对应的位置。

    /*
	 * 对数组A中数据进行排序
	 */
	public static void sort(Comparable[] a) {
		for (int i = 1; i < a.length; i++) {
			for (int j = i - 1; j >= 0; j--) {
				if (greater(a[j], a[j + 1])) {
					exch(a, j + 1, j);
				} else {
					break;
				}
			}
		}
	}

	/*
	 * 比较v元素是否大于w元素
	 */
	public static boolean greater(Comparable v, Comparable w) {
		return v.compareTo(w) > 0;
	}

	/*
	 * 交换元素在数组中的位置
	 */
	public static void exch(Comparable[] a, int i, int j) {
		Comparable num;
		num = a[i];
		a[i] = a[j];
		a[j] = num;
	}

上面代码在最好情况下时间复杂度为:O(n2),最坏情况下为O(n2),平均为O(n2)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值