#include <iostream>
using namespace std;
void print(int value [], int length)
{
for (size_t i = 0; i < length; i++)
{
cout << value[i] << " ";
}
cout << endl;
}
void exchange(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void BubbleSort(int value [], int length)
{
if (length <= 1 || value == NULL)return;
for (size_t i = length - 1; i > 0; i--)
{
for (size_t j = 0; j != i; j++)
{
if (value[j] > value[j + 1])
{
exchange(value[j], value[j + 1]);
}
}
}
}
void InsertSort(int value [], int length)
{
if (length <= 1 || value == NULL)return;
for (size_t i = 1; i < length; i++)
{
int temp = value [i];
int j = 0;
for (j = i-1; j >= 0; j--)
{
if (value[j] > temp)
{
value[j+1] = value [j];
}else
break;
}
value[j+1] = temp;
}
}
void SelectSort(int value [], int length)
{
for (size_t i = 0; i < length; i++)
{
int index = i;
for (size_t j = i; j < length; j++)
{
if (value[j] < value[index])
{
index = j;
}
}
if (index == i)continue;
exchange(value[i],value[index]);
}
}
int Partion(int value [], int low, int high)
{
int temp = value [low];
while (low < high)
{
while (low < high && value[high] >= temp) high--;
value[low] = value[high];
while (low < high && value[low] <= temp) low++;
value[high] = value[low];
}
value[low] = temp;
return low;
}
void QuickSort(int value [], int low, int high)
{
if (low < high)
{
int q = Partion(value, low, high);
QuickSort(value, low, q - 1);
QuickSort(value, q + 1, high);
}
}
void ShellSort(int value [], int length)
{
int d = 0;
for (d = length / 2; d >= 1;d/=2)
{
for (size_t i = d; i < length; i++)
{
int temp = value [i];
int j = i - d;
for (; j>=0 && value[j]>temp; j-=d)
{
value[j + d] = value [j];
}
value[j + d] = temp;
}
}
}
void meger(int value[], int length, int low, int mid, int high)
{
if (length <= 1 || value == NULL)return;
int *temp = new int[length];
memset(temp, 0, length);
int i = low;
int j = mid + 1;
int k = low;
while (j <= high && i<=mid)
{
if (value[i] <= value[j])
{
temp[k++] = value[i++];
}
else
{
temp[k++] = value[j++];
}
}
while (i <= mid)
{
temp[k++] = value[i++];
}
while (j <= high)
{
temp[k++] = value[j++];
}
for (size_t i = low; i <= high; i++)
{
value[i] = temp[i];
}
delete [] temp;
}
void MegerSort(int value [], int length, int low,int high)
{
if (low < high)
{
int m = (low + high) / 2;
MegerSort(value, length, low, m);
MegerSort(value, length, m + 1, high);
meger(value, length, low, m, high);
}
}
void fixHeap(int value[], int i, int length)
{
if (length <= 1 || value == NULL || i >= length || i < 0)return;
int temp = value[i];
int j = 2 * i + 1;
while (j < length)
{
if (j < length && value[j + 1] > value[j]) j++;
if (value[j] <= temp)break;
value[i] = value[j];
i = j;
j = 2 * i + 1;
}
value[i] = temp;
}
void HeapSort(int value [], int length)
{
for (int i = length / 2; i >= 0;i--)
{
fixHeap(value, i, length);
}
for (int i = length - 1; i >= 0;i--)
{
exchange(value[0], value[i]);
fixHeap(value, 0, i - 1);
}
}
int main()
{
int value [] = {3,2,8,5,-2,9,7,0};
int length = sizeof(value) / sizeof(int);
cout << "before sort:";
print(value,length);
//BubbleSort(value,length);
//InsertSort(value,length);
//SelectSort(value,length);
//QuickSort(value, 0, length - 1);
//ShellSort(value, length);
//MegerSort(value, length, 0, length - 1);
HeapSort(value, length);
cout << "after sort :";
print(value,length);
}
implementation of General Sort Algorithm - mark
最新推荐文章于 2020-02-02 15:22:20 发布