希尔排序和堆排序

原创
2014/05/08 23:34
阅读数 125
#include<iostream>
using namespace std;
void xierSort(int *a ,int n){
	int h;
	for(int i=n/2;i>=1;i/=2){
		
	for(int j=i;j<n;j++){
		int temp=a[j];
	 for( h=j-i;h>=0;h=h-i){
 		if(temp<a[h]){
		 	a[h+i]=a[h];
		 }else
		 break;
 	}
	 a[h+i]=temp;
	 }
	 }
}
void maxhead(int *a,int head,int len){
	while(head<=len&&2*head+1<len){
		int left=2*head+1;
		int max=head;
		if(left<len&&a[head]<a[left])
		 {
 			 max=left;
		 }
		 if(left+1<len&&a[left+1]>a[max])
		   max=left+1;
		   if(max!=head){
		   int temp=a[max];
		   a[max]=a[head];
		   a[head]=temp;
		 head=max;
		   }else
		   break;
	}
}
void headSort(int *a,int n){
	for(int i=n/2-1;i>=0;i--)
	  maxhead(a,i,n);
	  for(int j=n-1;j>0;j--){
  		int temp=a[0];
  		a[0]=a[j];
  		a[j]=temp;
  		maxhead(a,0,j);
  	}
}
void Bubble(int *a ,int n){
	for(int i=0;i<n;i++)
	for(int j=n-1;j>i;j--){
		if(a[j]<a[j-1]){
			int temp=a[j-1];
			a[j-1]=a[j];
			a[j]=temp;
		}
	}
}
int main(){
	int a[]={
		3,2,1,5,8
	};
//	xierSort(a,8);
	//Bubble(a,8);
	headSort(a,5);
	for(int i=0;i<5;i++)
	cout<<a[i]<<' ';
}


展开阅读全文
打赏
0
6 收藏
分享
加载中
更多评论
打赏
0 评论
6 收藏
0
分享
返回顶部
顶部