implementation of General Sort Algorithm - mark

#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);
}

发布了32 篇原创文章 · 获赞 6 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/scutth/article/details/12437515
今日推荐