您的位置:首页 > 编程语言 > Java开发

java排序

2016-04-22 15:11 281 查看
这段时间因为需要面试,重新熟悉了下相关的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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息