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

快速排序
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();
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值