1. 程式人生 > 實用技巧 >常用短語欄位(實時更新)

常用短語欄位(實時更新)

簡單選擇排序

void SelectSort(int A[],int n) {
    int i,min,j;
    for(i=0; i<n-1; i++) { //一共進行n-1趟排序
        min=i;//記錄最小元素的位置
        for(j=i+1; j<n; j++) //在A[i...n-1]中選擇最小元素的位置
            if(A[j]<A[min])min=j;//更新最小元素的位置
        if(min!=j) swap(A[i],A[min]);//與第i個位置交換
    }
}

堆排序

void AdjustUp(int A[],int
k) {//引數k為向上調整的結點,也是堆的元素個數 A[0]=A[k]; int i=k/2;//若結點值大於雙親結點,就將雙親結點向下調,並繼續向上比較 while(i>0&&A[i]<A[0]) { A[k]=A[i];//雙親結點下調 k=i; i=k/2;//繼續向上比較 } A[k]=A[0];//複製到最終位置 } void AdjustDown(int A[],int k,int len) { A[0]=A[k];//A[0]暫存 for(int
i=2*k;i<=len;i++)//沿著關鍵字較大的子節點向下篩選 { if(i<len&&A[i]<A[i+1]) i++;//取關鍵字值較大的子節點下標 if(A[0]>=A[i])break;//篩選結束 else{ A[k]=A[i];//將A[i]調整到雙親結點上 k=i;//修改k,方便繼續向下篩選 } } A[k]=A[0];//被篩選的結點的值放入最終位置 } void BuildMaxHeap(int
A[],int len) {//建立大根堆 for(int i=len/2; i>0; i--) {//從i=[n/2]~1,反覆調整堆 AdjustDown(A,i,len); } } void HeapSort(int A[],int len) { BuildMaxHeap(A,len);//初始建堆 for(int i=len;i>1;i--)//n-1趟交換和建堆的過程 { swap(A[i],A[1]);//輸出堆頂元素(和堆底元素交換) AdjustDown(A,1,i-1);//整理,把剩餘的i-1個元素整理成堆 } }