淺析java雙向冒泡排序算法
以整數(shù)升序排序?yàn)槔齺砗唵握f明一下雙向冒泡排序的過程:首先從前往后把最大數(shù)移到最后,然后反過來從后往前把最小的一個(gè)數(shù)移動到數(shù)組最前面,這一過程就是第一輪,然后重復(fù)這一過程,最終就會把整個(gè)數(shù)組從小到大排列好。雙向冒泡排序要稍微優(yōu)于傳統(tǒng)的冒泡排序,因?yàn)殡p向排序時(shí)數(shù)組的兩頭都排序好了,我們只需要處理數(shù)組的中間部分即可,而單向即傳統(tǒng)的冒泡排序只有尾部的元素是排好序的,這時(shí)每輪處理都需要從頭一直處理到已經(jīng)排好序元素的前面一個(gè)元素。雖然它在效率上有了點(diǎn)改進(jìn),但它也不能大幅度提高其排序的效率,這是由冒泡排序的基本過程所決定了的。在此基礎(chǔ)上改進(jìn)了一下,下面的代碼可以實(shí)現(xiàn)對奇數(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ù)組一開始就有序
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)將最小的值放到了開頭
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) {
/**
* 無重復(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)和算法之冒泡排序(動力節(jié)點(diǎn)Java學(xué)院整理)
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort
- java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述
- Java實(shí)現(xià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)與算法之選擇排序(動力節(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)文章
Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容
這篇文章主要介紹了Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java中不得不知的Collection接口與Iterator迭代器
這篇文章主要介紹了Java中的Collection接口與Iterator迭代器,文中有詳細(xì)的代碼示例供大家參考,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-06-06基于java中的null類型---有關(guān)null的9件事
這篇文章主要介紹了java中的null類型---有關(guān)null的9件事,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java發(fā)送http的get、post請求實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猨ava發(fā)送http的get、post請求實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05深入理解springMVC中的Model和Session屬性
這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務(wù)器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下2024-02-02