选择排序 直接插入排序 希尔排序 堆排序
2014-07-24 16:58
183 查看
#include<iostream> using namespace std; void InsertSort(int num[],int len)//没有哨兵 { int i,j,temp; for(i=1;i<len;i++) { if(num[i]<num[i-1]) { temp=num[i]; for(j=i-1;num[j]>temp;j--) { num[j+1]=num[j]; } num[j+1]=temp; } } } void SelectSort(int num[],int len) { int i,j,k; for(i=0;i<len;i++) { k=i; for(j=i+1;j<len;j++) { if(num[k]>num[j]) k=j; } if(k!=i); { swap(num[i],num[k]); } } } void HillSort(int num[],int len) { int j,k,seg,temp; for(seg=len/2;seg>0;seg/=2) { for(j=seg;j<len;j++) { if(num[j]<num[j-seg]) { temp=num[j]; k=j-seg; while(k>=0&&num[k]>temp) { num[k+seg]=num[k]; k-=seg; } num[k+seg]=temp; } } } } int main() { int num[]={4,2,5,45,6,8,11,1,9,100}; // InsertSort(num,10); // SelectSort(num,10); HillSort(num,10); for(int i=0;i<10;i++) cout<<num[i]<<" "; cout<<endl; system("pause"); return 0; }
#include<iostream> using namespace std; void MakeMinHeap(int a[],int n); void MinHeapFixdown(int a[],int i,int n); void MinHeapSort(int a[],int n); void MakeMinHeap(int a[],int n) { int i; for(i=n/2-1;i>=0;i--) { MinHeapFixdown(a,i,n); } } void MinHeapFixdown(int a[],int i,int n) { int j,temp; temp=a[i]; j=2*i+1; while(j<n) { if(j+1<n && a[j+1]<a[j]) { j++; } if(a[j]>=temp) break; a[i]=a[j]; i=j; j=2*i+1; } a[i]=temp; } void MinHeapSort(int a[],int n) { int i; for(i=n-1;i>=1;i--) { cout<<a[0]<<" "; swap(a[i],a[0]); MinHeapFixdown(a,0,i); } cout<<a[0]<<endl; } void main() { int temp[5]={2,4,12,1,54}; MakeMinHeap(temp,5); MinHeapSort(temp,5); system("pause"); }
相关文章推荐