`
GongQi
  • 浏览: 101073 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

各种排序算法

 
阅读更多
#include <stdio.h>
#define N 5

//从小到大
void bubbleSort(int p[]){
	int i=0,j=0,min=0;
	for(i=0;i<N;i++)
		for(j=N-1;j>i;j--){
			if(p[j]<p[j-1]){
				min=p[j-1];
				p[j-1]=p[j];
				p[j]=min;
			}
		}
}
//从大到小
void bubbleSort2(int p[]){
	int i=0,j=0,min=0;
	for(i=0;i<N-1;i++)
		for(j=i;j<N-1;j++){
			if(p[j]<p[j+1]){
				min=p[j];
				p[j]=p[j+1];
				p[j+1]=min;
			}
		}
}
//从小到大
void selectSort(int *p){
	int i=0,j=0,temp=0,min=0;
	for(i=0;i<N-1;i++){
		min=i;
		for(j=i+1;j<N;j++){
			if(p[j]<p[min]){
				min=j;
			}
		}
		if(min!=i){
			temp=p[i];
			p[i]=p[min];
			p[min]=temp;
		}
	}
}

//从大到小
void selectSort2(int *p){
	int i=0,j=0,temp=0,max=0;
	for(i=0;i<N-1;i++){
		max=i;
		for(j=i+1;j<N;j++){
			if(p[j]>p[max]){
				max=j;
			}
		}
		if(max!=i){
			temp=p[i];
			p[i]=p[max];
			p[max]=temp;
		}
	}
}

void insertSort(int p[]){
	int i=0,j=0,temp=0;
	for(i=1;i<N;i++){
		if(p[i]<p[i-1])
		{
			temp=p[i];
			for(j=i-1;temp<p[j]&&j>=0;j--)
			{
					p[j+1]=p[j];
			}
			p[j+1]=temp;
		}
	}
}

void shellSort(int * p){
	int i=0,j=0,temp=0;
	int increment=N-1;
	while(increment>1){
		increment=increment/3+1;
		for(i=increment;i<N;i++){
			if(p[i]<p[i-increment]){
				temp=p[i];
				for(j=i-increment;j>=0&&temp<p[j];j-=increment)
					p[j+increment]=p[j];
				p[j+increment]=temp;
			}
		}
	}
}

void heapAdjust(int *p,int i,int j){
	int lchild=2*i+1;
	int rchild=2*i+2;
	int max=i;
	int temp;
	if(i<=(N-1)/2){
		if(lchild<=N-1&&p[lchild]>max)
			max=lchild;
		if(rchild<=N-1&&p[rchild>max])
			max=rchild;
		if(max!=i)
		{
			temp=p[i];
			p[i]=p[max];
			p[max]=temp;
			heapAdjust(p,max,N-1);
		}
	}
}

void heapSort(int *p){
	int i=0,temp=0;
	for(i=(N-1)/2;i>=0;i--){
		heapAdjust(p,i,N-1);
	}
	for(i=N-1;i>=0;i--){
		temp=p[i];
		p[i]=p[0];
		p[0]=temp;
		heapAdjust(p,0,i-1);
	}
}

void merge(int *p,int low,int mid,int high){
	int i=low,j=mid+1,k=0;
	int array[10];
	while(i<=mid&&j<=high){
		array[k++]=p[i]<=p[j]?p[i++]:p[j++];
	}
	while(i<=mid)
		array[k++]=p[i++];
	while(j<=high)
		array[k++]=p[j++];
	for(i=low,k=0;i<=high;k++,i++)
		p[i]=array[k];
}

void mergeSort(int *p,int low,int high){
	int mid;
	if(low<high){
		mid=(low+high)/2;
		mergeSort(p,low,mid);
		mergeSort(p,mid+1,high);
		merge(p,low,mid,high);
	}
}

void quickSort(int p[],int left,int right){
	int i,j,x,temp,k;
	if(left<right){
		i=left-1;
		x=p[right];
		for(j=left;j<right;j++){
			if(p[j]<=x){
				i++;
				temp=p[i];p[i]=p[j];p[j]=temp;
			}
		}
		temp=p[i+1];p[i+1]=x;p[right]=temp;
		quickSort(p,left,i);
		quickSort(p,i+2,right);
	}	
}
//位图排序,时间复杂度O(n)
void bitmapSort(){
	int unsort[]={3,5,4,2,1,7,6,8,10,9};
	int x=0,i=0;
	for(i=0;i<10;i++){
		x=x|(0x01<<(unsort[i]%32));
	}
	for(i=0;i<32;i++){
		if((x&(0x01<<i))==(0x01<<i))
			printf("%d ",i);
	}
}

void main(){
	int unsort[]={4,3,5,6,1,2},i;
	quickSort(unsort,0,5);	
	for(i=0;i<6;i++)
	printf("%d ",unsort[i]);
	bitmapSort();
}


0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics