排序算法练习――代码汇总

2014-11-23 23:36:48 · 作者: · 浏览: 3

之前写的插入排序,合并排序,堆排序,快速排序,计数排序算法,C++源码,发出来,大家共同学习。^_^

//排序算法汇总练习

#include "stdafx.h"
#include 

using namespace std;

	void InsertSort();//声明插入排序函数

	void MergeSort(int num[],int left,int right);//声明合并排序函数
	void Merge(int num[],int left,int right);//声明合并排序中要用到的合并函数

	void HeapSort();//声明堆排序函数
	void BuildHeap();//声明堆排序中用到的建立堆函数
	void HeapIfy(int i);//声明建立堆时要用到的保证堆性质的函数

	void QuickSort(int start,int end);//声明快速排序函数
	int Partition(int start,int end);//声明快速排序中用到的分割函数

	void CountingSort();//声明计数排序函数

	int num[5];
	int main()
	{
		for(int i=0;i<=4;i++)
		cin>>num[i];
		int length=sizeof(num)/sizeof(num[0]);
		CountingSort();
		//QuickSort(0,length-1);
		//HeapSort();
		//InsertSort();
		//MergeSort(num,0,4);
		for(int i=0;i<5;i++)
		cout<=0&&num[j]>key) 
			{
				num[j+1]=num[j];
				j--;
			}
			num[j+1]=key;
		}
	}

	//合并排序函数
	void MergeSort(int num[],int left,int right)
	{
		if(left=num[n])
				temp[i++]=num[n++];
		}
		if(m>j)
		{
			while(n<=right)
				temp[i++]=num[n++];
		}
		else
		{
			while(m<=j)
				temp[i++]=num[m++];
		}
		for(i=left;i<=right;i++)
		{
			num[i]=temp[i];
		}
	}

	//堆排序函数,注意堆排序时考虑树节点排序是从1开始,数组下标从0开始,所以相应减1
	void HeapIfy(int i,int length)
	{
		int l=2*i;
		int r=2*i+1;
		int largest,temp;
		if(num[l-1]>num[i-1]&&l<=length)
			largest=l;
		else
			largest=i;
		if(num[r-1]>num[largest-1]&&r<=length)
			largest=r;
		if(largest!=i)
		{
			temp=num[i-1];
			num[i-1]=num[largest-1];
			num[largest-1]=temp;
			HeapIfy(largest,length);
		}
	}
	void BuildHeap()
	{
		int length=sizeof(num)/sizeof(num[0]);
		for(int i=length/2;i>=1;i--)
			HeapIfy(i,length);
	}
	void HeapSort()
	{
		int length=sizeof(num)/sizeof(num[0]);
		int temp;
		BuildHeap();
		for(int i=length;i>=1;i--)
		{
			temp=num[i-1];
			num[i-1]=num[0];
			num[0]=temp;
			HeapIfy(1,i-1);
		}
	}

	//快速排序算法函数
	int Partition(int start,int end)
	{
		int x=num[start];
		int i=start;
		int j=end;
		int temp;
		while(num[i]x){
			j--;
		}
		if(i=0;l--)
		{
			numTemp[temp[num[l]]-1]=num[l];
			temp[num[l]]--;
		}
		for(int m=0;m