1、堆排序
void HeapAdjust(int array[], int root, int size)
{
int parent = root;
int child = root*2 + 1;
while(child < size)
{ //还剩三个数据时:1(0), 2(1), 3(2)左右孩子需要调整,此时:child+1 == child
if(child+1 <= size && array[child] < array[child + 1])
{
child += 1;
}
if(array[parent] < array[child])
{
std::swap(array[parent], array[child]);
parent = child;
child = child*2 + 1;
}
else
break;
}
}
void HeapSort(int array[], int size)
{
for(int idx = (size-2)/2; idx >= 0; --idx)
{
HeapAdjust(array, idx, size);
}
int index = size-1;
while(index > 0)
{
std::swap(array[0], array[index]);
index--;
HeapAdjust(array, 0, index);
}
}
2、选择排序
int SelectMinKey(int a[], int n, int i)
{
int k = i;
for(int j=i+1 ;j< n; ++j) {
if(a[k] > a[j]) k = j;
}
return k;
}
/**
* 选择排序
*
*/
void selectSort(int a[], int n){
int key, tmp;
for(int i = 0; i< n; ++i) {
key = SelectMinKey(a, n,i); //选择最小的元素
if(key != i){
tmp = a[i]; a[i] = a[key]; a[key] = tmp; //最小元素与第i位置元素互换
}
print(a, n , i);
}
}