堆排序(小根堆)

void HeapAdjust(int data[], int k, int length)
{

	int i = k;
	int j = 2 * k + 1;
	while (j < length)
	{
		if (j+1<length&&data[j]>data[j + 1])
			j++;
		if (data[i] <= data[j])
			break;
		else
		{
			int temp = data[i];
			data[i] = data[j];
			data[j] = temp;
			i = j;
			j = 2 * i + 1;
		}
	}
}
void HeapSort(int data[], int length)
{
	if (data == NULL || length <= 0)
		return;
	for (int i = (length - 1) / 2; i >= 0; i--)
		HeapAdjust(data, i, length);
	for (int i = length - 1; i >= 0; i--)
	{
		int temp = data[0];
		data[0] = data[i];
		data[i] = temp;
		HeapAdjust(data, 0, i);
	}
}
int main(void)
{
	int data[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
	int length = 8;
	HeapSort(data, length);
	for (int i = 0; i<length; ++i) {
		std::cout << data[i] << " ";
	}

	std::cout << std::endl;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章