java排序

这段时间因为需要面试,重新熟悉了下相关的java排序,特记录,做记忆强化

1.冒泡排序

冒泡排序顾名思义,是按照数据值的大小进行对应的冒泡动作(本文以从小到大冒泡)

最大的数值最先冒泡到数组末尾,其次是第二大的数值冒泡到结尾-1,第三(结尾-2)、第四(结尾-3)、最后数组第二小数字冒泡到合适位置,冒泡结束

优点:便于理解,代码逻辑简单

缺点:数值的位移次数过多,导致排序效率较低

int[] a = { 4, 3, 5, 2, 1, 9, 6, 7, 0, 8 };
		for (int i = 0; i < a.length - 1; i++) {
			for (int y = 0; y < a.length - i - 1; y++) {
				if (a[y] > a[y + 1]) {
					int b = a[y];
					a[y] = a[y + 1];
					a[y + 1] = b;
				}
			}
		}


2.选择排序

选择排序是选择得到对应的数值,插到对应的下标

数组第一个数和第二个数比较,将小的数与数组第三个数比较,得到更小数,再与第四个数比较。得到更小数。遍历比下去,得到整个数组最小值,将最小值的位置与下标0的数字互换位置,最小数字就已经处于数组的正确位置了。然后从数组第二个数字开始比较,查找数组第二小数字,将位置与下标1的数字互换位置,依次下去.....

优点:相比于冒泡排序,位移次数变少

int[] a = { 4, 3, 5, 2, 1, 9, 6, 7, 0, 8 };
		int out, in = 0, ni = 0;
		for (int i = 0; i < a.length; i++) {
			//重置out、in的值(为了不影响下次比较)
			out = i;
			in = out;
			// 比较过程 得到最小值下标in
			while (out + 1 < a.length) {
				if (a[in] > a[out + 1]) {
					in = out + 1;
				}
				out++;
			}
			// 互换位置
			ni = a[i];
			a[i] = a[in];
			a[in] = ni;
		}


3.希尔排序

希尔排序的核心是阶段有序,或者说间隔有序。然后慢慢缩小间隔,最后间隔为1再排列,整个数组就有序了。

默认间隔:arrayList.length = h;

                  h = h/2;

int[] a = { 7, 3, 5, 2, 1, 9, 6, 4, 0, 8, 11, 43, 34, 14 };
		int b = a.length;
		int c, d;
		// 希尔排序
		while (b / 2 >= 1) {
			b = b / 2;
			for (d = b; d < a.length; d++) {
				while (d - b >= 0 && a[d - b] > a[d]) {
					c = a[d];
					a[d] = a[d - b];
					a[d - b] = c;
					d = d - b;
				}
			}
		}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值