#include <iostream>
#include<vector>
#include<string>
#include<time.h>
#include<algorithm>
#include<ctime>
using namespace std;
//输出数组
void Display(vector<int> &arr,int n)
{
for (int i = 0; i < n; i++)
{
cout << arr.at(i) << endl;
}
}
//调整堆
void adjust(vector<int>& arr, int len,int indix)
{
int left = 2 * indix + 1;
int right = 2 * indix + 2;
int maxIndix = indix;
if(left<len&&arr.at(left)>arr.at(maxIndix))
maxIndix=left;
if (right<len && arr.at(right)>arr.at(maxIndix))
maxIndix = right;
if (maxIndix != indix)
{
swap(arr.at(maxIndix), arr.at(indix));
adjust(arr, len, maxIndix);
}
}
void HeapSort(vector<int> &arr, int size)
{
for (int i = size / 2 - 1; i >= 0; i--)
{
adjust(arr, size, i);
}
for (int i = size - 1; i >= 1; i--)
{
swap(arr.at(0), arr.at(i));
adjust(arr, i, 0);
}
}
int main()
{
int n;
cout << "请输入需要排序的数字个数" << endl;
cin >> n;
vector<int> arr;
srand((int)time(NULL));
for (int i = 0; i < n; i++)
{
arr.push_back(rand() % 1000);
}
cout << "排序前:" << endl;
Display(arr, n);
clock_t startTime = clock();
cout << "排序后:" << endl;
HeapSort(arr,n);
clock_t endTime = clock();
cout << "整个程序用时:" << double(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
Display(arr, n);
return 0;
}
C++堆排序
最新推荐文章于 2025-03-21 11:16:52 发布