java排序幾代碼 JAVA 排序

java快速排序簡單代碼

.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是快速排序算法:

在縉云等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),縉云網(wǎng)站建設(shè)費用合理。

快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個項目要 Ο(nlogn) 次比較。在最壞狀況下則需要 Ο(n2) 次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他 Ο(nlogn) 算法更快,因為它的內(nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實現(xiàn)出來。

快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。

快速排序又是一種分而治之思想在排序算法上的典型應(yīng)用。本質(zhì)上來看,快速排序應(yīng)該算是在冒泡排序基礎(chǔ)上的遞歸分治法。

快速排序的名字起的是簡單粗暴,因為一聽到這個名字你就知道它存在的意義,就是快,而且效率高!它是處理大數(shù)據(jù)最快的排序算法之一了。雖然 Worst Case 的時間復(fù)雜度達(dá)到了 O(n?),但是人家就是優(yōu)秀,在大多數(shù)情況下都比平均時間復(fù)雜度為 O(n logn) 的排序算法表現(xiàn)要更好,可是這是為什么呢,我也不知道。好在我的強迫癥又犯了,查了 N 多資料終于在《算法藝術(shù)與信息學(xué)競賽》上找到了滿意的答案:

快速排序的最壞運行情況是 O(n?),比如說順序數(shù)列的快排。但它的平攤期望時間是 O(nlogn),且 O(nlogn) 記號中隱含的常數(shù)因子很小,比復(fù)雜度穩(wěn)定等于 O(nlogn) 的歸并排序要小很多。所以,對絕大多數(shù)順序性較弱的隨機數(shù)列而言,快速排序總是優(yōu)于歸并排序。

1. 算法步驟

從數(shù)列中挑出一個元素,稱為 "基準(zhǔn)"(pivot);

重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作;

遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序;

2. 動圖演示

代碼實現(xiàn) JavaScript 實例 function quickSort ( arr , left , right ) {

var len = arr. length ,

? ? partitionIndex ,

? ? left = typeof left != 'number' ? 0 : left ,

? ? right = typeof right != 'number' ? len - 1 : right ;

if ( left

java冒泡排序法代碼

冒泡排序是比較經(jīng)典的排序算法。代碼如下:

for(int i=1;iarr.length;i++){

for(int j=1;jarr.length-i;j++){

//交換位置

} ? ?

拓展資料:

原理:比較兩個相鄰的元素,將值大的元素交換至右端。

思路:依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。重復(fù)第一趟步驟,直至全部排序完成。

第一趟比較完成后,最后一個數(shù)一定是數(shù)組中最大的一個數(shù),所以第二趟比較的時候最后一個數(shù)不參與比較;

第二趟比較完成后,倒數(shù)第二個數(shù)也一定是數(shù)組中第二大的數(shù),所以第三趟比較的時候最后兩個數(shù)不參與比較;

依次類推,每一趟比較次數(shù)-1;

??

舉例說明:要排序數(shù)組:int[]?arr={6,3,8,2,9,1};?

for(int i=1;iarr.length;i++){

for(int j=1;jarr.length-i;j++){

//交換位置

} ? ?

參考資料:冒泡排序原理

用JAVA排序的代碼是什么

jdk中提供了排序的工具類。

像java.util.Arrays, java.util.Collections. 這連個類都有個sort方法.

同時jdk中還提供了定義排序規(guī)則的api,

像java.util.Comparator, java.lang.Comparable。

java程序排序

自己寫的三種傳統(tǒng)排序法??炫欧ㄖ饕亲约阂矝]怎么搞明白……

(你可以建數(shù)組來存數(shù)據(jù),就不寫完整的了。)

public void insert(int[] a3) {//插入排序法

// TODO Auto-generated method stub

System.out.println("插入法");

int temper=0;

for(int i=1;ia3.length;i++){

for(int j=i;j0;j--){

if(a3[j]a3[j-1]){

temper=a3[j];

a3[j]=a3[j-1];

a3[j-1]=temper;

}else break;

}

}

}

//插入排序法完

//選擇排序法

public void select(int[] a2) {

// TODO Auto-generated method stub

System.out.println("選擇排序法");

int temper=0;

for (int i = 0; i a2.length-1; i++) {

int min = a2[i];

int minFoot = i;

for (int j = i + 1; j a2.length; j++) {

if (min a2[j]) {

min=a2[j];

minFoot=j;

}

}

temper=a2[i];

a2[i]=min;

a2[minFoot]=temper;

}

}

//選擇排序法完

//冒泡排序法

public void Bubbling(int[] a1) {

System.out.println("冒泡排序法");

int temper = 0;

for (int i = 0; i a1.length - 1; i++) {

for (int j = 0; j a1.length - 1 - i; j++) {

if (this.a1[j] this.a1[j + 1]) {

temper = a1[j];

a1[j] = a1[j + 1];

a1[j + 1] = temper;

}

}

}

}

//冒泡排序法完

java中基數(shù)排序算法代碼

/**??

*?冒泡法排序br/??

*?li比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。/li??

*?li對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應(yīng)該會是最大的數(shù)。/li??

*?li針對所有的元素重復(fù)以上的步驟,除了最后一個。/li??

*?li持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。/li??

*???

*?@param?numbers??

*????????????需要排序的整型數(shù)組??

*/??

public?static?void?bubbleSort(int[]?numbers)?{???

int?temp;?//?記錄臨時中間值???

int?size?=?numbers.length;?//?數(shù)組大小???

for?(int?i?=?0;?i??size?-?1;?i++)?{???

for?(int?j?=?i?+?1;?j??size;?j++)?{???

if?(numbers[i]??numbers[j])?{?//?交換兩數(shù)的位置???

temp?=?numbers[i];???

numbers[i]?=?numbers[j];???

numbers[j]?=?temp;???

}???

}???

}???

}

java中排序算法代碼

package temp;

import sun.misc.Sort;

/**

* @author zengjl

* @version 1.0

* @since 2007-08-22

* @Des java幾種基本排序方法

*/

/**

* SortUtil:排序方法

* 關(guān)于對排序方法的選擇:這告訴我們,什么時候用什么排序最好。當(dāng)人們渴望先知道排在前面的是誰時,

* 我們用選擇排序;當(dāng)我們不斷拿到新的數(shù)并想保持已有的數(shù)始終有序時,我們用插入排序;當(dāng)給出的數(shù)

* 列已經(jīng)比較有序,只需要小幅度的調(diào)整一下時,我們用冒泡排序。

*/

public class SortUtil extends Sort {

/**

* 插入排序法

* @param data

* @Des 插入排序(Insertion Sort)是,每次從數(shù)列中取一個還沒有取出過的數(shù),并按照大小關(guān)系插入到已經(jīng)取出的數(shù)中使得已經(jīng)取出的數(shù)仍然有序。

*/

public int[] insertSort(int[] data) {

1/11頁

int temp;

for (int i = 1; i data.length; i++) {

for (int j = i; (j 0) (data[j] data[j - 1]); j--) {

swap(data, j, j - 1);

}

}

return data;

}

/**

* 冒泡排序法

* @param data

* @return

* @Des 冒泡排序(Bubble Sort)分為若干趟進(jìn)行,每一趟排序從前往后比較每兩個相鄰的元素的大?。ㄒ虼艘惶伺判蛞容^n-1對位置相鄰的數(shù))并在

* 每次發(fā)現(xiàn)前面的那個數(shù)比緊接它后的數(shù)大時交換位置;進(jìn)行足夠多趟直到某一趟跑完后發(fā)現(xiàn)這一趟沒有進(jìn)行任何交換操作(最壞情況下要跑n-1趟,

* 這種情況在最小的數(shù)位于給定數(shù)列的最后面時發(fā)生)。事實上,在第一趟冒泡結(jié)束后,最后面那個數(shù)肯定是最大的了,于是第二次只需要對前面n-1

* 個數(shù)排序,這又將把這n-1個數(shù)中最小的數(shù)放到整個數(shù)列的倒數(shù)第二個位置。這樣下去,冒泡排序第i趟結(jié)束后后面i個數(shù)都已經(jīng)到位了,第i+1趟實

* 際上只考慮前n-i個數(shù)(需要的比較次數(shù)比前面所說的n-1要小)。這相當(dāng)于用數(shù)學(xué)歸納法證明了冒泡排序的正確性

分享名稱:java排序幾代碼 JAVA 排序
地址分享:http://muchs.cn/article48/docdshp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、營銷型網(wǎng)站建設(shè)、電子商務(wù)用戶體驗、微信公眾號網(wǎng)站維護(hù)

廣告

聲明:本網(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)

手機網(wǎng)站建設(shè)