版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}