首页 > 代码库 > 排序与查找
排序与查找
1,快排
void QuickSort( int a[] , int low , int high ){ int i = low , j = high ; int temp = a[i] ; while( i < j ) { while( i < j && temp <= a[j] )j-- ; if( i < j ) { a[i] = a[j] ; i++ ; } while( i < j && a[i] < temp ) i++ ; if( i < j ) { a[j] = a[i] ; j-- ; } } a[i] = temp ; if( low < i ) QuickSort( a , low , i - 1 ) ; if( i < high ) QuickSort( a , i + 1 , high ) ;}
2,堆排
template <class T >void /*MinHeap<T>::*/FilterDown( T heapArray[] , int i , int heapSize ){ int currentPos , childPos ; T target ; currentPos = i ;//当前节点 target = heapArray[i] ; childPos = 2*currentPos + 1 ;//当前节点的左孩子节点 while( childPos < heapSize ) { if( childPos + 1 < heapSize && heapArray[ childPos + 1 ] < heapArray[ childPos ] ) childPos++ ; if( target <= heapArray[ childPos ] ) break; else { heapArray[ currentPos ] = heapArray[ childPos ] ; currentPos = childPos ; childPos = 2*currentPos + 1 ; } } heapArray[currentPos] = target ;}//堆化template<class T>/*MinHeap<T>::*/MinHeap( T arr[] , n ){ if( n <= 0 ) { exit(0) ; } int currentPos = ( n - 1 )/2 ; while( currentPos > = 0 ) { FilterDown( arr , currentPos , n ) ; }}void HeapSort( int a[] , int n ){ int temp ; MinHeap( a , n ) ; for( int i = n-1 ; i >0 ; i -- ) { temp = a[0] ; a[0] = a[i] ;//把最后一个元素放到堆顶 a[i] = temp ;//把第一个元素放到最后 FilterDown( a , 0 , i-1 ) ;//调整跟节点满足最小堆 }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。