堆排序源代码

#include #include #include #define Left 2*root+1 #define Right 2*root+2 void adjust(int arr[],int nLength,int root) { if(arr==NULL||nLength<0)return; while(1) { if(Rightarr[Right]) { if(arr[Left]>arr[root]) { arr[Left] = arr[root] ^ arr[Left]; arr[root] = arr[root] ^ arr[Left]; arr[Left] = arr[root] ^ arr[Left]; root = Left; } else { break; } } else { if(arr[Right]>arr[root]) { arr[Right] = arr[root] ^ arr[Right]; arr[root] = arr[root] ^ arr[Right]; arr[Right] = arr[root] ^ arr[Right]; root = Right; } else { break; } } } else if(Leftarr[root]) { arr[Left] = arr[root] ^ arr[Left]; arr[root] = arr[root] ^ arr[Left]; arr[Left] = arr[root] ^ arr[Left]; root = Left; } else { break; } } else { break; } } } void HeapSort(int arr[],int nLength) { int i=0; if(arr==NULL||nLength<0)return; for(i=nLength/2-1;i>=0;i--) { adjust(arr,nLength,i); } for(i=nLength-1;i>=0;i--) { arr[0] = arr[i] ^ arr[0]; arr[i] = arr[i] ^ arr[0]; arr[0] = arr[i] ^ arr[0]; adjust(arr,i,0); } } int main() { int arr[] = {12,9,3,0,4,8,7,11,2,1,6}; int i; HeapSort(arr,sizeof(arr)/sizeof(arr[0])); for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++) { printf(?%d ?,arr[i]); } printf(?\n?); system(?pause?); return 0; return 0; }
发布了5 篇原创文章 · 获赞 0 · 访问量 1474

猜你喜欢

转载自blog.csdn.net/qq_32562005/article/details/52382937