首页 > 其他 > 详细

快速排序,插入排序,归并排序,计数排序,基数排序,堆排序

时间:2014-04-09 00:40:21      阅读:293      评论:0      收藏:0      [点我收藏+]
快速排序
vector<int > quickSort(vector<int> &t,int a,int b)
	{
		if(a>=b) return t;
		int i=a,j=b;
		int tmp,tmp2;
		tmp=t[a];
		while (i<j)
		{
			while(i<b&&t[i+1]<tmp) i++;
			while(j>a&&t[j-1]>tmp) j--;
			if(i<j) {tmp2=t[i];t[i]=t[j];t[j]=tmp2;continue;}
			else {tmp2=t[a];t[a]=t[j];t[j]=tmp2;quickSort(t,a,j-1);quickSort(t,j+1,b);}
		}
		return t;
	}

插入排序

void insertSort(int A[],int n)
	{
		int i;
		for (int j=1;j<n;j++)
		{
			int key=A[j];
			i=j-1;
			while (i>=0&&A[i]>key)
			{
				A[i+1]=A[i];
				i--;
			}
			A[i+1]=key;
		}
	}

归并排序

void merge(int A[],int p,int q,int r)
	{
		int n1,n2;
		n1=q-p+1;
		n2=r-q;
		int *L=(int *)malloc((n1+1)*sizeof(int));
		int *R=(int *)malloc((n2+1)*sizeof(int));
		int i,j;
		for (i=0;i<n1;i++)
			L[i]=A[p+i];
		for (i=0;i<n2;i++)
			R[i]=A[q+i+1];
		L[n1]=32767;
		R[n2]=32767;
		i=0;j=0;
		for (int k=p;k<=r;k++)
		{
			if (L[i]<=R[j])
			{
				A[k]=L[i];
				i++;
			}
			else 
			{
				A[k]=R[j];
				j++;
			}
		}
		return;
	}
	void  mergesort(int A[],int p,int r)
	{
		if(p<r)
		{	int q=(p+r)/2;
		mergesort(A,p,q);
		mergesort(A,q+1,r);
		merge(A,p,q,r);
		}
	}
计数排序
void counting_sort(int A[],int B[],int k)
	{
		int i,j;
		int *C=(int *)malloc((k+1)*sizeof(int));
		for(i=0;i<=k;i++)
			C[i]=0;
		for (j=1;j<11;j++)
		{
			C[A[j]]++;
		}
		for(i=1;i<=k;i++)
			C[i]+=C[i-1];
		for (j=10;j>=1;j--)
		{
			B[C[A[j]]-1]=A[j];
			C[A[j]]--;
		}
	}

基数排序

#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <malloc.h>
using namespace std;


int B[10]={};//store the result
int D[3][10]={};//store the splitted result of A[]
int t;
int A[]={-1,123,234,432,532,656,723,212,312,458,687};

void counting_sort(int k)
{
	
	int i,j;
	int *C=(int *)malloc((k+1)*sizeof(int));
	for(i=0;i<=k;i++)
		C[i]=0;
	for (j=0;j<10;j++)
	{
		C[D[t][j]]++;
	}
	for(i=1;i<=k;i++)
		C[i]+=C[i-1];
	for (j=9;j>=0;j--)
	{
		B[C[D[t][j]]-1]=A[j+1];
		C[D[t][j]]--;
	}
	for (int k=0;k<10;k++)
	{
		A[k+1]=B[k];
	}
}


void radixsort(int A[],int d)
{
	int scale=1;
	for(int i=0;i<d;i++)
		scale*=10;
	
	for (int j=0;j<10;j++)
	{
		int tmp;
		tmp=A[j+1];
		tmp/=scale;
		D[d][j]=tmp%10;		
	}
 //0代表低位
	counting_sort(9);	
}

void main()
{
	for (t=0;t<3;t++)
	{
		radixsort(A,t);
	}
	 
	_getche();
}

堆排序

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <conio.h>
using namespace std;


int heap_size;

int exchange(int &a,int &b)
{
	int tmp;
	tmp=a;a=b;b=tmp;
	return 0;
}
int max_heapify(int A[],int i)
{
	int l,r,largest;
	l=2*i;
	r=l+1;
	if (l<=heap_size&&A[l]>A[i])
	{ largest=l;
	}
	else
		largest=i;
	if (r<=heap_size&&A[r]>A[largest])
	{ largest=r;
	}
	if (largest!=i)
	{
		exchange(A[i],A[largest]);
		max_heapify(A,largest);
	}
	return 0;
}

int build_heap(int A[])
{
	for (int i=heap_size/2;i>0;i--)
	{
		max_heapify(A,i);
	}
	return 0;
}

int main()
{
	int A[]={-1,4,13,23,2,16,8,9,5,5,11,21};
	heap_size=11;
	build_heap(A);
	for (int i=heap_size;i>1;i--)
	{
		exchange(A[i],A[1]);
		heap_size--;
		max_heapify(A,1);
	}
	for (int j=1;j<=11;j++)
	{
		cout<<A[j]<<" ";
	}
	_getche();
}


快速排序,插入排序,归并排序,计数排序,基数排序,堆排序,布布扣,bubuko.com

快速排序,插入排序,归并排序,计数排序,基数排序,堆排序

原文:http://blog.csdn.net/daydayyup/article/details/23202089

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!