堆排序

来源:互联网 发布:mac rmvb转换 编辑:程序博客网 时间:2024/06/05 12:04


//////////  Heap_sort  ///////////////#include <iostream>using namespace std;const int Declared_Size=20;//Create a arraytemplate <class type>void fillArray(type a[], int size, int & numberUsed){type next;int index=1;cin>>next;while ((next!=-1)&&(index<size)){a[index]=next;index++;cin>>next;}numberUsed=index-1;}//Heap_sort//Create a heaptemplate <class type>void Heap_Create(type a[],  int s, int t){     type w=a[s]; for (int i=2*s;i<=t;i*=2) { if (i<t) i=(a[i]>a[i+1])?  i:i+1; if(w>=a[i])   break; a[s]=a[i]; s=i; }     a[s]=w;}//Heap_Create//template <class type>void swap(int &a1, int &a2){      int temp=a1;  a1=a2;  a2=temp;}template <class type>void Heap_sort(type a[], int num){for (int i=num/2;i>=1;i--)    Heap_Create(a,i,num);for (int i=num; i>1; i--){swap(a[1],a[i]);Heap_Create(a,1,i-1);}}template <class type>void print_array(type a[], int num){  for(int i=1;i<=num;i++)  cout<<a[i]<<" ";  cout<<endl;}int main(){int arr[Declared_Size], siz;cout<<"Create a array: "<<endl;fillArray(arr, Declared_Size, siz);print_array(arr, siz);cout<<"Sort_Heap is: "<<endl;Heap_sort(arr,siz);    print_array(arr, siz);cout<<"End of program.\n";return 0;}
<pre name="code" class="cpp">//归并排序#include <stdio.h>#include <stdlib.h>#include <string.h>#define m 11 void merge(int arr[],int low,int mid,int high) {      int k, begin1=low, end1=mid, begin2=mid+1,end2=high;  int *temp=(int *)malloc((high-low+1)*sizeof(int));      for (k=0;begin1<=end1 && begin2<= end2;++k)      {  if (arr[begin1]<=arr[begin2])  temp[k]=arr[begin1++];  else  temp[k]=arr[begin2++];      }  if (begin1<=end1)           memcpy(temp+k,arr+begin1,(end1-begin1+1)*sizeof(int));  if (begin2<=end2)  memcpy(temp+k,arr+begin2,(end2-begin2+1)*sizeof(int));    memcpy(arr+low,temp,(high-low+1)*sizeof(int));  free(temp); } void merge_sort(int arr[], unsigned int first,unsigned int last) { int mid=0; int(first<last) {          mid=(first+last)/2;  merge_sort(arr,first,mid);  merge_sort(arr,mid+1,last);  merge_sort(arr,first,mid,last); } } void main() {    int arr[m],i;for (i=0;i<m;i++)        scanf("%d",&arr[i]);merge_sort(arr,0,m-1);for (i=0;i<m;i++)   printf("%d",arr[i]); }







0 0