标签:wap ... 堆排 void 复杂度 序列 dma color 分析
4.堆排序:(大根堆)
①将存放在array[0,...,n-1]中的n个元素建成初始堆;
②将堆顶元素与堆底元素进行交换,则序列的最大值即已放到正确的位置;
③但此时堆被破坏,将堆顶元素向下调整使其继续保持大根堆的性质,再重复第②③步,直到堆中仅剩下一个元素为止。
堆排序算法的性能分析:
空间复杂度:o(1);
时间复杂度:建堆:o(n),每次调整o(log n),故最好、最坏、平均情况下:o(n*logn);
稳定性:不稳定
1 public class HeapSort { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 int[] arr={5,54,12,78,45,9,82,62,55,8,0,6,-8,101}; 6 HeapSort p=new HeapSort(); 7 p.heapsort(arr); 8 for(int i=0;i<arr.length;i++){ 9 System.out.print(arr[i]+" "); 10 } 11 } 12 /*循环建立最大堆,实现排序*/ 13 public void heapsort(int[] arr){ 14 for(int i=0;i<arr.length-1;i++){ 15 buildMaxHeap(arr,arr.length-i-1); 16 swap(arr,0,arr.length-1-i); 17 } 18 } 19 /*建立最大堆*/ 20 public void buildMaxHeap(int[] arr,int lastindex){ 21 if(arr==null||arr.length<1){ 22 return; 23 }else{ 24 int half=(lastindex-1)/2; 25 for(int i=half;i>=0;i--){ 26 int root=i; 27 while(2*root+1<lastindex){ 28 int left=2*root+1; 29 if(left+1<lastindex&&arr[left]<arr[left+1]){ 30 left++; 31 } 32 if(arr[root]<arr[left]){ 33 swap(arr,root,left); 34 root=left; 35 }else{ 36 break; 37 } 38 } 39 } 40 } 41 } 42 /*交换位置*/ 43 public void swap(int[] arr,int i,int j){ 44 int temp=arr[i]; 45 arr[i]=arr[j]; 46 arr[j]=temp; 47 } 48 }
标签:wap ... 堆排 void 复杂度 序列 dma color 分析
原文地址:http://www.cnblogs.com/lulushow/p/6819050.html