スタックソート(C++実装、非常に簡潔明瞭)
1173 ワード
#include
#include
using namespace std;
//i ,n ,
// ,
void change_smallest(vector &nums,int len,int i)
{
int smallest = i;
int left = 2 * i + 1;// 0
int right = 2 * i + 2;
if (left &nums)
{
int len = nums.size();
for (int i = len / 2 - 1; i >= 0; i--)
{
change_smallest(nums,len, i);
}
for (int i = len - 1; i >= 0; i--)
{
swap(nums[i], nums[0]);// , , ,
change_smallest(nums, i,0);// , ,
}
}
void printarray(vector arr, int n)
{
for (int i = n - 1; i >= 0; i--)
cout << arr[i] << " ";// ,
cout << endl;
}
//
//
int main()
{
vector arr = { 3,5,4,7,6,9,8};
int n = arr.size();
cout << "origin array:";
printarray(arr, n);
heap_sort(arr);
cout << "sorted array:";
printarray(arr, n);
system("pause");
return 0;
}