淺析java雙向冒泡排序算法
以整數(shù)升序排序?yàn)槔齺?lái)簡(jiǎn)單說(shuō)明一下雙向冒泡排序的過(guò)程:首先從前往后把最大數(shù)移到最后,然后反過(guò)來(lái)從后往前把最小的一個(gè)數(shù)移動(dòng)到數(shù)組最前面,這一過(guò)程就是第一輪,然后重復(fù)這一過(guò)程,最終就會(huì)把整個(gè)數(shù)組從小到大排列好。雙向冒泡排序要稍微優(yōu)于傳統(tǒng)的冒泡排序,因?yàn)殡p向排序時(shí)數(shù)組的兩頭都排序好了,我們只需要處理數(shù)組的中間部分即可,而單向即傳統(tǒng)的冒泡排序只有尾部的元素是排好序的,這時(shí)每輪處理都需要從頭一直處理到已經(jīng)排好序元素的前面一個(gè)元素。雖然它在效率上有了點(diǎn)改進(jìn),但它也不能大幅度提高其排序的效率,這是由冒泡排序的基本過(guò)程所決定了的。在此基礎(chǔ)上改進(jìn)了一下,下面的代碼可以實(shí)現(xiàn)對(duì)奇數(shù)偶數(shù)分別排序
雙向冒泡排序源代碼:
package com.zc.manythread;
import java.util.Random;
/**
* 雙向冒泡排序
* @author 偶my耶
*
*/
public class BBSort {
//雙向冒泡算法,極大的減少了循環(huán)排序的次數(shù)
public int[] sort(int[] a)throws Exception{
int j;
int limit=a.length;
int st=-1;
while(st<limit){
//必須要給st和limit賦值,否則若數(shù)組一開(kāi)始就有序
st++;
limit--;
boolean swapped=false;
//第一次循環(huán)將最大的值放到末尾
for (j = st ; j < limit; j++) {
if (a[j]>a[j+1]) {
int T=a[j];
a[j]=a[j+1];
a[j+1]=T;
swapped=true;
}
}
if (!swapped) {
return a;
}else {
swapped=false;
//第二次循環(huán)將最小的值放到了開(kāi)頭
for (j = limit; --j>=st;) {
if(a[j]>a[j+1]){
int T=a[j];
a[j]=a[j+1];
a[j+1]=T;
swapped=true;
}
}
if (!swapped) {
return a;
}
}
}
return a;
}
private static int[] createDate(int count) {
/**
* 無(wú)重復(fù)數(shù)組
*/
int[] data=new int[count];
Random rand = new Random();
boolean[] bool = new boolean[100];
int num = 0;
for (int i = 0; i < count; i++) {
do {
// 如果產(chǎn)生的數(shù)相同繼續(xù)循環(huán)
num = rand.nextInt(100);
} while (bool[num]);
bool[num] = true;
/* list.add(num);*///list 列表
data[i]=num;
}
return data;
}
public static void main(String[] args) {
final int count=10;
int[] data=createDate(count);
for(int n : data){
System.out.print(n+"\t");
}
System.out.println();
BSrot bsrot=new BSrot(data);
try {
int[] a=bsrot.sort(data);
for(int n : a){
System.out.print(n+"\t");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運(yùn)行結(jié)果:

- Java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort
- java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述
- Java實(shí)現(xiàn)冒泡排序算法及對(duì)其的簡(jiǎn)單優(yōu)化示例
- Java實(shí)現(xiàn)八個(gè)常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等
- java數(shù)據(jù)結(jié)構(gòu)與算法之希爾排序詳解
- java數(shù)據(jù)結(jié)構(gòu)與算法之插入排序詳解
- java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法詳解
- Java數(shù)據(jù)結(jié)構(gòu)與算法之選擇排序(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
- java數(shù)據(jù)結(jié)構(gòu)與算法之奇偶排序算法完整示例
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:選擇排序 Selection Sort
- java數(shù)據(jù)結(jié)構(gòu)與算法之冒泡排序詳解
相關(guān)文章
使用@Validated和@Valid 解決list校驗(yàn)的問(wèn)題
這篇文章主要介紹了使用@Validated和@Valid 解決list校驗(yàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA 如何控制編輯左側(cè)的功能圖標(biāo)ICON(操作步驟)
很多朋友被idea左側(cè)的圖標(biāo)不見(jiàn)了這一問(wèn)題搞的焦頭爛額,不知道該怎么操作,今天小編就交大家如何控制編輯左側(cè)的功能圖標(biāo) ICON,文字內(nèi)容不多,主要通過(guò)兩張截圖給大家說(shuō)明,感興趣的朋友一起看看吧2021-05-05
Springboot Redis設(shè)置key前綴的方法步驟
這篇文章主要介紹了Springboot Redis設(shè)置key前綴的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
java 生成有序賬號(hào)的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇java 生成有序賬號(hào)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
Java ArrayList add(int index, E element)和set(int index, E el
今天小編就為大家分享一篇關(guān)于Java ArrayList add(int index, E element)和set(int index, E element)兩個(gè)方法的說(shuō)明,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
Mybatis plus 配置多數(shù)據(jù)源的實(shí)現(xiàn)示例
這篇文章主要介紹了Mybatis plus 配置多數(shù)據(jù)源的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

