堆、快速排序实现
比较排序:在排序的最终结果中,各元素的次序依赖于它们之间的比较结果。
1 #include<iostream> 2 #include<cstdlib> 3 #include<climits> 4 5 using namespace std; 6 void exchange(int &a,int &b){ 7 8 int temp; 9 temp = a; 10 a = b; 11 b=temp; 12 cout<<a<<"<->"<<b<<endl; 13 } 14 //快速排序 分区函数1 15 int Partition1(int a[],int low,int high){ 16 17 int x = a[high]; 18 int i = low - 1; 19 20 for(int j=low;j<=high-1;j++){ //i和j从一头变化,low~i保存小于等于X的值,j~high保存大于x的值 21 22 if(a[j] <= x){ 23 24 ++i; 25 exchange(a[i],a[j]); 26 } 27 } 28 exchange(a[i+1],a[high]); 29 return i+1; 30 } 31 //快速排序 分区函数2 32 int Partition2(int a[],int low,int high){ //i,j从俩头交替向中间聚拢 33 int key = a[high]; 34 35 int i = low; 36 int j = high; // 37 while(i<j){ 38 while(i<j&&a[i]<=key) 39 ++i; 40 if(i<j) a[j--]=a[i]; 41 while(i<j&&a[j]>key) 42 --j; 43 if(i<j) a[i++]=a[j]; 44 } 45 a[i] = key; 46 return i; 47 } 48 void QuickSort(int a[],int low,int high){ 49 50 int mid; 51 if(low < high){ 52 mid = Partition2(a,low,high); 53 QuickSort(a,low,mid-1); 54 QuickSort(a,mid+1,high); 55 } 56 57 } 58 59 //堆排序 60 //最大堆化函数0: 递归实现 61 void MaxHeapify(int a[],int i,int size){ 62 63 int l = 2*i; 64 int r = 2*i+1; 65 int largest = i; 66 if(l<=size&&a[l]>a[largest]) 67 largest = l; 68 if(r<=size&&a[r]>a[largest]) 69 largest = r; 70 if(largest!=i){ 71 72 exchange(a[i],a[largest]); 73 MaxHeapify(a,largest,size); 74 } 75 } 76 //最大堆化函数1:循环实现 77 void MaxHeapify1(int a[],int i,int size){ 78 int l,r,largest; 79 int index = i; 80 while(index<=size/2){ 81 82 l = 2*index; 83 r = 2*index+1; 84 largest = index; 85 if(l<=size&&a[l]>a[largest]) 86 largest = l; 87 if(r<=size&&a[r]>a[largest]) 88 largest = r; 89 if(index!=largest){ 90 exchange(a[index],a[largest]); 91 index = largest; 92 } 93 else break; 94 95 } 96 } 97 void BuildMaxHeap(int a[],int low,int high){ 98 int length = high-low+1; 99 for(int i=length/2;i>=low;--i){ 100 MaxHeapify1(a,i,length); 101 } 102 } 103 104 void HeapSort(int a[],int low, int high){ 105 BuildMaxHeap(a,low,high); 106 int size =high-low+1; 107 for(int i=high;i>=low;--i){ 108 109 exchange(a[low],a[i]); 110 size=size-1; 111 MaxHeapify1(a,low,size); 112 } 113 114 } 115 int main(){ 116 int num; 117 while(1){ 118 cin>>num; 119 int *array=NULL; 120 array = (int *)malloc(sizeof(int)*(num)); 121 122 for(int i=0;i<num;i++) cin>>array[i]; 123 124 //QuickSort(array,0,num-1); 125 HeapSort(array,0,num-1); 126 127 for(int i=0;i<num;i++) cout<<array[i]<<" "; 128 } 129 return 0; 130 }
                    
                
                
            
        
浙公网安备 33010602011771号