今天小編給大家分享的是java中實現(xiàn)快速排序的方法,相信很多人都不太了解,為了讓大家更加了解java中實現(xiàn)快速排序的方法,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦。
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、茶陵網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為茶陵等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。快速排序的時間復(fù)雜度并不固定,如果在最壞情況下(在一個原本逆向排序的數(shù)列中選擇第一個元素為基準(zhǔn)元素)速度比較慢,達到 O(n^2)(和選擇排序一個效率),但是如果在比較理想的情況下時間復(fù)雜度 O(nlogn)。
實現(xiàn)快速排序的關(guān)鍵在于先在數(shù)組中選擇一個數(shù)字,接下來把數(shù)組中的數(shù)字分為兩部分,比選擇的數(shù)字小的數(shù)字移動到數(shù)組的左邊,比選擇的數(shù)字大的數(shù)字移動到數(shù)組的右邊。這體現(xiàn)了分治法的思想。
下面我們來實現(xiàn)這個函數(shù):
int Partition(int data[],int length,int start,int end) { if(data == nullptr || length <= 0 || start < 0 || end >=length) throw new std::exception("Invalid Parameters"); int index = RandomInRange(start,end); Swap(&data[index],&data[end]); int small = start - 1; for(index = start; index < end; index++) { if(data[index]<data[end]) { ++small; if(small != index) Swap(&data[index],&data[small]); } } ++small; Swap(&data[small],&data[end]); return small; } int RandomInRange(int min, int max) { int random = rand()%(max - min +1) +min; return random; } int Swap(int *num1, int *num2) { int temp = *num1; *num1 = num2; *num2 = temp; }
上面代碼中函數(shù)RandomInRange
用來生成一個在start和end之間的隨機數(shù),函數(shù)Swap用來交換兩個數(shù)字。
下面我們用遞歸來實現(xiàn)快速排序的代碼:
void QuickSort(int data[], int length, int start, int end) { if(start == end) return; int index = Partition(data, length, start, end); if(index > start) QuickSort(data, length, start, index -1); if(index < end) QuickSort(data, length, index + 1, end); }
關(guān)于java中實現(xiàn)快速排序的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
當(dāng)前題目:java中實現(xiàn)快速排序的方法-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article28/cccdjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、面包屑導(dǎo)航、建站公司、全網(wǎng)營銷推廣、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容