C++ 排序算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HarvestWu/article/details/81158343
#include <bits/stdc++.h>
#define MaxSize 100
#define ArrayLen(array) sizeof(array)/sizeof(array[0])
#define TypeName template<class T>
/*
* Created by HarvestWu on 2018/07/22.
*/

using namespace std;

//起泡排序
TypeName
void BubbleSort(T R[],int n)
{
	int temp;
	for (int i = 0; i < n-1; i++)
	{
		for (int j = 0; j < n - i - 1; j++)
		{
			if (R[j] > R[j+1])
			{
				temp = R[j];
				R[j] = R[j + 1];
				R[j + 1] = temp;
			}
		}
	}
}


//直接插入排序
TypeName
void InsertSort(T R[], int n)
{
	int i, j;
	int temp;
	for (i = 0; i < n; i++)
	{
		temp = R[i];
		j = i - 1;
		while (j>=0&&temp<R[j])//大于待排序值,均往后移
		{
			R[j + 1] = R[j];
			--j;
		}
		R[j + 1] = temp;//插入
				
	}
}

//快速排序
TypeName
void QuickSort(T R[], int l, int r)
{
	int temp;
	int i = l, j = r-1;
	if (l < r)
	{
		temp = R[l];
		while (i < j)
		{
			while (i < j&&R[j] >= temp) --j;
			if (i < j)
			{
				R[i] = R[j];
				++i;
			}
			while (i < j&&R[i] < temp) ++i;
			if (i < j)
			{
				R[j] = R[i];
				--j;
			}
		}
		R[i] = temp;
		QuickSort(R, l, i - 1);
		QuickSort(R, i + 1, r);
	}
}

//选择排序
TypeName
void SelectSort(T R[],int n)
{
	int k, temp;
	for (int i = 0; i < n; i++)
	{
		k = i;
		for (int j = i+1; j < n; j++)
			if (R[k]>R[j])
				k = j;
		temp = R[i];
		R[i] = R[k];
		R[k] = temp;
	}
}

//最大堆调整
TypeName
void Shift(T R[], int l, int r)
{
	int i = l, j = 2 * i;
	int temp = R[i];
	while (j<=r)
	{
		if (j < r&&R[j] < R[j + 1])
			++j;
		if (temp < R[j])
		{
			R[i] = R[j];
			i = j;
			j = 2 * i;
		}
		else break;
	}
	R[i] = temp;
}

//堆排序
TypeName
void HeapSort(T R[], int n)
{
	int temp;
	for (int i = n / 2; i >= 1; --i)//初始堆
		Shift(R, i, n);
	for (int i = n; i >= 2; --i)
	{
		temp = R[1];
		R[1] = R[i];
		R[i] = temp;
		Shift(R, 1, i - 1);
	}
}

//打印
TypeName
void Visit(T R[],int n)
{
	for (int i = 0; i < n; i++)
		cout << R[i] << " ";
	cout << endl;
}

int main()
{
	int R[10] = { 1, 5, 45, 65, 87, 25, 4, 3632, 45,10 };
	int len = ArrayLen(R);
	//InsertSort(R, len);
	//QuickSort(R, 0, len);
	//SelectSort(R, len);
	//BubbleSort(R, len);
	HeapSort(R, len-1);
	Visit(R, len);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/HarvestWu/article/details/81158343