数据结构与算法-选择排序&堆排序
2018-03-30 本文已影响0人
星空下奔跑
简单选择排序
排序思想:每次选出最小值与对应位置记录交换,直至序列有序。
void SelectSort(Sqlist &L){
for(int i=1;i<L.length;i++){
min=selmin(L,i);
L.r[i]<->L.r[min];
}//for
}
Java实现:
private void selectSort(int[] array) {
int len=array.length;
for (int i = 0; i < len; i++) {
int target=array[i];
int index=i;
for (int j = i + 1; j < len; j++) {
if (target > array[j]) {
target=array[j];
index=j;
}
}
array[index]=array[i];
array[i]=target;
}
println(array);
}
堆排序
排序思想:将待排序列看成一个完全二叉树,完全二叉树所有非终端结点均不大于其左右孩子结点的值,反复进行便得到有序的序列。
//小顶堆
void HeapAdjust(Sqlist &L,int n){
for(int i=2*n;i<L.length;i*=2){
if(i<L.length&<(L.r[i],L.r[i/2]){
L.r[i]<->L.r[i/2];
}//if
}//for
}
void HeapSort(Sqlist &L){
for(int i=L.length/2;i<L.length;--i){
HeapAdust(L,i);
}
Java实现:
private void adjust(int[] a,int end) {
for (int i = end; i > 0; i--) {
if (a[i] > a[i / 2]) {
int tmp=a[i];
a[i] = a[i / 2];
a[i/2]=tmp;
}
}
}
private void heapSort(int[] array){
if (array != null && array.length > 0) {
adjust(array,array.length-1);
}
for (int i = array.length - 1; i > 0; i--) {
int tmp=array[i];
array[i] = array[0];
array[0]=tmp;
adjust(array,i-1);
}
println(testArray);
}