正文
(; j >=
0
&& temp //从后往前遍历。
a[j + d] = a[j];
}
a[j + d] = temp;
}
}
}
}
3.简单选择排序
常用于取序列中最大最小的几个数时。
(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)
1.遍历整个序列,将最小的数放在最前面。
2.遍历剩下的序列,将最小的数放在最前面。
3.重复第二步,直到只剩下一个数。
如何写成代码:
1.首先确定循环次数,并且记住当前数字和当前位置。
2.将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。
3.比对完成后,将最小的值与第一个数的值交换。
4.重复2、3步。
代码实现如下:
public
void
selectSort
(
int
[] a)
{
int
length = a.length;
for
(
int
i =
0
; i //循环次数
int
key = a[i];
int
position=i;
for
(
int
j = i +
1
; j //选出最小的值和位置
if
(a[j] key = a[j];
position = j;
}
}
a[position]=a[i];
a[i]=key;
}
}
4.堆排序
对简单选择排序的优化。
1.将序列构建成大顶堆。
2.将根节点与最后一个节点交换,然后断开最后一个节点。
3.重复第一、二步,直到所有节点断开。
代码实现如下:
public
void
heapSort
(
int
[] a
)
{
System.
out
.println(
"开始排序"
);
int
arrayLength=a.length;
for
(
int
i=
0
;i
-1;i++){
buildMaxHeap(a,arrayLength
-1
-i);
swap(a,
0
,arrayLength
-1
-i);
System.
out
.println(Arrays.toString(a));
}
}
private
void
swap
(
int
[] data,
int
i,
int
j
)
{
int
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
private