冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
為湘潭縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及湘潭縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都做網(wǎng)站、湘潭縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
冒泡排序算法的運(yùn)作如下:
比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
針對所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。
public?class?BubbleSort{??
public?static?void?main(String[]?args){??
int?score[]?=?{67,?69,?75,?87,?89,?90,?99,?100};??
for?(int?i?=?0;?i??score.length?-1;?i++){????//最多做n-1趟排序??
for(int?j?=?0?;j??score.length?-?i?-?1;?j++){????//對當(dāng)前無序區(qū)間score[0......length-i-1]進(jìn)行排序(j的范圍很關(guān)鍵,這個(gè)范圍是在逐步縮小的)??
if(score[j]??score[j?+?1]){????//把小的值交換到后面??
int?temp?=?score[j];??
score[j]?=?score[j?+?1];??
score[j?+?1]?=?temp;??
}??
}??????????????
System.out.print("第"?+?(i?+?1)?+?"次排序結(jié)果:");??
for(int?a?=?0;?a??score.length;?a++){??
System.out.print(score[a]?+?"\t");??
}??
System.out.println("");??
}??
System.out.print("最終排序結(jié)果:");??
for(int?a?=?0;?a??score.length;?a++){??
System.out.print(score[a]?+?"\t");??
}??
}??
}
package temp;
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java幾種基本排序方法
*/
/**
* SortUtil:排序方法
* 關(guān)于對排序方法的選擇:這告訴我們,什么時(shí)候用什么排序最好。當(dāng)人們渴望先知道排在前面的是誰時(shí),
* 我們用選擇排序;當(dāng)我們不斷拿到新的數(shù)并想保持已有的數(shù)始終有序時(shí),我們用插入排序;當(dāng)給出的數(shù)
* 列已經(jīng)比較有序,只需要小幅度的調(diào)整一下時(shí),我們用冒泡排序。
*/
public class SortUtil extends Sort {
/**
* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次從數(shù)列中取一個(gè)還沒有取出過的數(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)行,每一趟排序從前往后比較每兩個(gè)相鄰的元素的大小(因此一趟排序要比較n-1對位置相鄰的數(shù))并在
* 每次發(fā)現(xiàn)前面的那個(gè)數(shù)比緊接它后的數(shù)大時(shí)交換位置;進(jìn)行足夠多趟直到某一趟跑完后發(fā)現(xiàn)這一趟沒有進(jìn)行任何交換操作(最壞情況下要跑n-1趟,
* 這種情況在最小的數(shù)位于給定數(shù)列的最后面時(shí)發(fā)生)。事實(shí)上,在第一趟冒泡結(jié)束后,最后面那個(gè)數(shù)肯定是最大的了,于是第二次只需要對前面n-1
* 個(gè)數(shù)排序,這又將把這n-1個(gè)數(shù)中最小的數(shù)放到整個(gè)數(shù)列的倒數(shù)第二個(gè)位置。這樣下去,冒泡排序第i趟結(jié)束后后面i個(gè)數(shù)都已經(jīng)到位了,第i+1趟實(shí)
* 際上只考慮前n-i個(gè)數(shù)(需要的比較次數(shù)比前面所說的n-1要小)。這相當(dāng)于用數(shù)學(xué)歸納法證明了冒泡排序的正確性
冒泡排序是比較經(jīng)典的排序算法。代碼如下:
for(int i=1;iarr.length;i++){
for(int j=1;jarr.length-i;j++){
//交換位置
} ? ?
拓展資料:
原理:比較兩個(gè)相鄰的元素,將值大的元素交換至右端。
思路:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。重復(fù)第一趟步驟,直至全部排序完成。
第一趟比較完成后,最后一個(gè)數(shù)一定是數(shù)組中最大的一個(gè)數(shù),所以第二趟比較的時(shí)候最后一個(gè)數(shù)不參與比較;
第二趟比較完成后,倒數(shù)第二個(gè)數(shù)也一定是數(shù)組中第二大的數(shù),所以第三趟比較的時(shí)候最后兩個(gè)數(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++){
//交換位置
} ? ?
參考資料:冒泡排序原理
代碼:
public class test {
private static void sort(Integer arr[], int n) {
if (n = 1) return; ? ? ? //如果只有一個(gè)元素就不用排序了
for (int i = 0; i n; ++i) {
// 提前退出冒泡循環(huán)的標(biāo)志位,即一次比較中沒有交換任何元素,這個(gè)數(shù)組就已經(jīng)是有序的了
boolean flag = false;
for (int j = 0; j n - i - 1; ++j) { ? ? ? ?//此處你可能會(huì)疑問的jn-i-1,因?yàn)槊芭菔前衙枯喲h(huán)中較大的數(shù)飄到后面,
// 數(shù)組下標(biāo)又是從0開始的,i下標(biāo)后面已經(jīng)排序的個(gè)數(shù)就得多減1,總結(jié)就是i增多少,j的循環(huán)位置減多少
if (arr[j] arr[j + 1]) { ? ? ? ?//即這兩個(gè)相鄰的數(shù)是逆序的,交換
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (!flag) break;//沒有數(shù)據(jù)交換,數(shù)組已經(jīng)有序,退出排序
}
}
public static void main(String[] args) {
Integer arr[] = {2, 6, 3, 67, 54};
sort(arr, arr.length);
System.out.println("冒泡排序后的數(shù)組為");
for (Integer i : arr) {
System.out.println(i);
}
}
}
整數(shù)轉(zhuǎn)成字符串后排序。import java.util.Arrays;import java.util.Collections;import java.util.List;public class Test { public static void main(String[] args) { List list = Arrays.asList("1", "10", "12", "3", "2", "4", "5"); Collections.sort(list); System.out.println(Arrays.toString(list.toArray())); }}
參考代碼如下,可以按需求自己修改
import?java.util.Date;
public?class?SortThread?{
public?static?void?main(String[]?args)?{
//產(chǎn)生一個(gè)隨機(jī)數(shù)組
int[]?ary?=?getArray();
//啟動(dòng)冒泡排序線程
new?Thread(new?MaoPao(ary)).start();
//啟動(dòng)快速排序線程
new?Thread(new?KuaiSu(ary)).start();
}
private?static?int[]?getArray()?{
//建議數(shù)字n不要超過1百萬,十萬左右就好了
int?n?=?(int)?(Math.random()*1000000)+11;
int[]?ary=?new?int[n];
System.out.println("n的值是"?+?n);
for?(int?i?=?0;?i??ary.length;?i++)?{
ary[i]?=?(int)?(Math.random()*100000);
}
return?ary;
}
}
//冒泡排序
class?MaoPao?implements?Runnable?{
int[]?ary;
public?MaoPao(int[]?ary)?{
this.ary?=?ary;
}
@Override
public?void?run()?{
long?st?=?System.currentTimeMillis();
System.out.println(new?Date()?+?"冒泡排序線程:開始執(zhí)行排序");
for?(int?i?=?0;?i??ary.length?-?1;?i++)?{
for?(int?j?=?0;?j??ary.length?-?i?-?1;?j++)?{
if?(ary[j]??ary[j?+?1])?{
int?temp?=?ary[j];
ary[j]?=?ary[j?+?1];
ary[j?+?1]?=?temp;
}
}
}
long?et?=?System.currentTimeMillis();
System.out.println(new?Date()?+?"冒泡排序線程完成排序,耗費(fèi)時(shí)間"?+?(et?-?st)?+?"毫秒");
for?(int?i?=?0;?i??ary.length;?i++)?{
System.out.println(ary[i]+"?");
}
}
}
//快速排序
class?KuaiSu?implements?Runnable?{
int[]?ary;
public?KuaiSu(int[]?ary)?{
this.ary?=?ary;
}
@Override
public?void?run()?{
long?st?=?System.currentTimeMillis();
System.out.println(new?Date()?+?"快速排序線程:開始執(zhí)行排序");
quickSort(ary,?1,?ary.length);
long?et?=?System.currentTimeMillis();
System.out.println(new?Date()?+?"快速排序線程排序完成,耗費(fèi)時(shí)間"?+?(et?-?st)?+?"毫秒");
for?(int?i?=?0;?i??ary.length;?i++)?{
System.out.println(ary[i]+"?");
}
}
public?static?int?Partition(int?a[],?int?p,?int?r)?{
int?x?=?a[r?-?1];
int?i?=?p?-?1;
int?temp;
for?(int?j?=?p;?j?=?r?-?1;?j++)?{
if?(a[j?-?1]?=?x)?{
i++;
temp?=?a[j?-?1];
a[j?-?1]?=?a[i?-?1];
a[i?-?1]?=?temp;
}
}
temp?=?a[r?-?1];
a[r?-?1]?=?a[i?+?1?-?1];
a[i?+?1?-?1]?=?temp;
return?i?+?1;
}
public?static?void?quickSort(int?a[],?int?p,?int?r)?{
if?(p??r)?{
int?q?=?Partition(a,?p,?r);
quickSort(a,?p,?q?-?1);
quickSort(a,?q?+?1,?r);
}
}
}
文章名稱:java語言排序代碼 java程序排序
URL標(biāo)題:http://m.newbst.com/article6/higdog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、、搜索引擎優(yōu)化、軟件開發(fā)、網(wǎng)站制作、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)