スタックソート(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;
}