演算法導論 7 2 針對有相同元素值的快速排序

2021-06-21 12:42:50 字數 964 閱讀 7792

題目詳見演算法導論7-2習題,在這裡我就不再贅述。

本文分為三個部分,第一部分是寫我改進演算法的思路,第二部分是演算法實現,第三部分是程式執行結果。

思路

《演算法導論》裡介紹的partition沒有考慮元素相等的情況,但是就算存在相同元素快排其實也可以適用的,只是相等的元素當作大於key的元素處理了。習題7-2要求經過partition函式之後與陣列變為三個部分,最左邊的是小於key(就是原演算法裡的a[r]),中間部分等於key,最右邊大於key。聯想到原來的partition函式採用乙個變數i來記錄小於key的元素的個數,我想可不可以也採用乙個變數t來記錄小於等於key的元素個數,其中i+1到t是等於key的元素。因此,當出現小於或者等於key的元素t加一,i也要加一。然後按照原來的思想exchange(a[t],a[j])。但是又到了解決問題的關鍵,只是這樣交換一次還不能達到我們的目的,我們必須注意到這個現象從p到i是小於key的元素,從i+1到t是等於key的元素,我們經過exchange(a[t+1],a[j])之後a[t+1]是乙個小於等於key的元素,若其小於key我們需要exchange(a[t],a[i]),將小於key的元素交換到最左邊,這樣我們就成功的將陣列裡元素分為三部分。

演算法實現

int *partition(int *a,int p,int r)

}else if(a[j]==key)

}temp=a[r];      // i+1到t+1等於key 

a[r]=a[t+1];

a[t+1]=temp;

int *po=(int *)malloc(sizeof(int)*2);   //儲存返回值

*po=i+1;

*(po+1)=t+1;

return po; 

}void quicksort(int *a,int p,int r)

}

jQuery1 9 1針對checkbox的調整

在jquery 1.8.x中的版本,我們對於checkbox的選中與不選中操作如下 判斷是否選中 checkbox prop checked 設定選中與不選中狀態 checkbox attr checked true checkbox attr checked false 但此方法在jquery1....

jQuery1 9 1針對checkbox的調整

在jquery 1.8.x中的版本,我們對於checkbox的選中與不選中操作如下 判斷是否選中 checkbox prop checked 設定選中與不選中狀態 checkbox attr checked true checkbox attr checked false 但此方法在jquery1....

selenium(4) 針對鍵盤的操作

1 usr bin env python2 coding utf 8 34 5 title 6 time 2020 6 19 13 33 7 author xinhua 8 blog 9 10from time import sleep 1112 from selenium import webdr...