新聞中心
求JAVA冒泡排序法的代碼
你好!很高興能幫到你。
創(chuàng)新互聯(lián)建站專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站重做改版、杏花嶺網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為杏花嶺等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
由于你剛學(xué)Java,所以一些編程規(guī)范是需要注意的,而我提供給你的答案看起來(lái)雖然有點(diǎn)復(fù)雜,不過(guò)采用了面向?qū)ο蟮木幊趟枷耄M量做到低耦合高內(nèi)聚,同時(shí)冒泡算法也做了升級(jí),為冒泡的高級(jí)快速排序算法,不過(guò)為了對(duì)比,也保存了傳統(tǒng)的冒泡算法。
需要講解一下,算法本身不難,難在如何做到編程規(guī)范、以及方便修改、易于修改、使得程序靈活、低耦合高內(nèi)聚。
算法部分請(qǐng)看Bubble類(lèi),里面有兩種算法,有注釋。
主類(lèi)為T(mén)estBubble,主要用于調(diào)用Bubble對(duì)象運(yùn)行算法、StuInfo對(duì)象提供學(xué)生作者信息、Info對(duì)象提供運(yùn)行過(guò)程中提示信息。
運(yùn)行結(jié)果如下(Bubble類(lèi)為核心算法類(lèi)):
************************************
run:
請(qǐng)輸入您將要輸入整數(shù)的個(gè)數(shù):
10
請(qǐng)輸入一串?dāng)?shù)字進(jìn)行冒泡排序,注意:每次只輸入一個(gè),輸完則回車(chē)
1:10
2:23
3:11
4:56
5:45
6:26
7:59
8:28
9:84
10:79
初始序列的數(shù)組為:
10 23 11 56 45 26 59 28 84 79
學(xué)號(hào):200815009* 班級(jí):08軟件3班 姓名:葉科良
排序好的數(shù)組為:
10 11 23 26 28 45 56 59 79 84
源代碼如下:
***************************************************
package testBubble;
import java.io.Reader;
import java.util.Scanner;
/**
*
* @author yekeliang
*/
public class TestBubble {
private CommandLineBubbleRunner commandLineBubbleRunner;
private int arraySize;
private int[] intArray;
private StuInfo stuInfo;
private Info info;
/**
* 測(cè)試方法
* @param args
*/
public static void main(String[] args) {
TestBubble test = new TestBubble();
}
/**
* 構(gòu)造方法
* 調(diào)用初始化學(xué)生數(shù)據(jù)、接收命令行整數(shù)、展示結(jié)果3個(gè)成員方法
*/
public TestBubble() {
initMemb();
initData();
runBubble();
showResult(this.getIntArray());
}
/**
* 初始化學(xué)生數(shù)據(jù)
*/
private void initData() {
stuInfo.setStuNum("200815009*");
stuInfo.setStuClass("08軟件3班");
stuInfo.setStuName("葉科良");
info.setInputIntNumInfo("請(qǐng)輸入您將要輸入整數(shù)的個(gè)數(shù):");
info.setInputIntInfo("請(qǐng)輸入一串?dāng)?shù)字進(jìn)行冒泡排序,注意:每次只輸入一個(gè),輸完則回車(chē)");
info.setShowInputInfo("初始序列的數(shù)組為:");
info.setShowResultInfo("排序好的數(shù)組為:");
info.setInputErrorInfo("對(duì)不起,輸入有誤!請(qǐng)輸入整數(shù).");
}
/**
* 接收命令行整數(shù),使用冒泡算法
*/
private void runBubble() {
try{
System.out.println(info.getInputIntNumInfo());
setArraySize(getCommandLineBubbleRunner().getArraySize());
System.out.println(info.getInputIntInfo());
setIntArray(getCommandLineBubbleRunner().getAcceptAsIntArray(getArraySize()));
System.out.println(info.getShowInputInfo());
getCommandLineBubbleRunner().showAcceptAsIntArray(getIntArray());
Bubble.quick(getIntArray());
} catch(java.util.InputMismatchException e) {
System.out.println(info.getInputErrorInfo());
}
}
/**
* 展示結(jié)果
*/
private void showResult(int intArray[]) {
System.out.println("\n" + stuInfo.toString());
System.out.println(info.getShowResultInfo());
for (int i = 0; i intArray.length; i++) {
System.out.print(intArray[i] + " ");
}
}
private void initMemb() {
stuInfo = new StuInfo();
info = new Info();
commandLineBubbleRunner = new CommandLineBubbleRunner();
}
public CommandLineBubbleRunner getCommandLineBubbleRunner() {
return commandLineBubbleRunner;
}
public void setCommandLineBubbleRunner(CommandLineBubbleRunner commandLineBubbleRunner) {
this.commandLineBubbleRunner = commandLineBubbleRunner;
}
public int getArraySize() {
return arraySize;
}
public void setArraySize(int arraySize) {
this.arraySize = arraySize;
}
public int[] getIntArray() {
return intArray;
}
public void setIntArray(int[] intArray) {
this.intArray = intArray;
}
private void getStuInfo() {}
}
/**
*
* @author 葉科良
*/
class CommandLineBubbleRunner {
public int num;//輸入整數(shù)個(gè)數(shù)
/**
* 從命令行中讀取需要輸入的整數(shù)個(gè)數(shù)
* @return 需要輸入的整數(shù)個(gè)數(shù)
*/
public int getArraySize() {
Scanner reader1 = new Scanner(System.in);
num = reader1.nextInt();
return num;
}
/**
* 指定數(shù)組大小,從命令行接收整數(shù)
* @param arraySize 數(shù)組大小
* @return 原始整數(shù)數(shù)組
*/
public int[] getAcceptAsIntArray(int arraySize) {
int[] acceptArray = new int[arraySize];
Scanner reader = new Scanner(System.in);
for (int i = 0; i getNum(); i++) {
System.out.print((i + 1) + ":");
acceptArray[i] = reader.nextInt();
}
return acceptArray;
}
/**
* 打印原始輸入數(shù)據(jù)
* @param intArray
*/
public void showAcceptAsIntArray(int[] intArray){
for (int i = 0; i getNum(); i++) {
System.out.print(intArray[i] + " ");
}
}
/**
* 取得數(shù)組大小
* @return
*/
public int getNum() {
return num;
}
}
class Bubble {
/**
* 給定一個(gè)數(shù)組,使用冒泡算法進(jìn)行排序
* @param acceptArray 給定的一個(gè)數(shù)組
* @return 排序好的數(shù)組
*/
public static int[] getResultAsIntArray(int[] acceptArray) {
int i, temp;
for (i = 0; i (acceptArray.length - 1); i++) {//兩兩進(jìn)行比較,符合條件的進(jìn)行交換
if (acceptArray[i] acceptArray[i + 1]) {
temp = acceptArray[i];
acceptArray[i] = acceptArray[i + 1];
acceptArray[i + 1] = temp;
}
}
return acceptArray;
}
/**
* 快速冒泡排序算法
* @param r 輸入的整數(shù)數(shù)組
* @param first 數(shù)組第一個(gè)下標(biāo)
* @param end 數(shù)組最后一個(gè)下標(biāo)
* @return 排好序的整數(shù)數(shù)組
*/
public static int partition(int[] r, int first, int end) {
int i, j;
i = first;
j = end;
while (i j) {
while (i j r[i] = r[j]) {
j--;
}
if (i j) {
int temp;
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
}
return i;
}
public static void quick(int[] r, int first, int end) { //利用遞歸反復(fù)劃分
if (first end) {
int pivot = partition(r, first, end); //調(diào)用劃分函數(shù)
quick(r, first, pivot - 1);
quick(r, pivot + 1, end);
}
}
public static int[] quick(int[] r){
quick(r,0,r.length-1);
return r;
}
}
class Info {
private String inputIntNumInfo;//提示用戶(hù)輸入整數(shù)個(gè)數(shù)的消息語(yǔ)句
private String inputIntInfo;//提示用戶(hù)輸入整數(shù)的消息語(yǔ)句
private String showInputInfo;//提示顯示用戶(hù)輸入整數(shù)的消息語(yǔ)句
private String inputErrorInfo;//提示用戶(hù)輸入有誤消息語(yǔ)句
private String showResultInfo;//提示顯示排序結(jié)果
public String getInputIntNumInfo() {
return inputIntNumInfo;
}
public void setInputIntNumInfo(String inputIntNumInfo) {
this.inputIntNumInfo = inputIntNumInfo;
}
public String getInputIntInfo() {
return inputIntInfo;
}
public void setInputIntInfo(String inputIntInfo) {
this.inputIntInfo = inputIntInfo;
}
public String getShowInputInfo() {
return showInputInfo;
}
public void setShowInputInfo(String showInputInfo) {
this.showInputInfo = showInputInfo;
}
public String getInputErrorInfo() {
return inputErrorInfo;
}
public void setInputErrorInfo(String inputErrorInfo) {
this.inputErrorInfo = inputErrorInfo;
}
public String getShowResultInfo() {
return showResultInfo;
}
public void setShowResultInfo(String showResultInfo) {
this.showResultInfo = showResultInfo;
}
}
class StuInfo {
private String stuNum;//學(xué)生學(xué)號(hào)
private String stuName;//學(xué)生姓名
private String stuClass;//學(xué)生班級(jí)
@Override
public String toString() {
return "學(xué)號(hào):" + getStuNum() + " 班級(jí):" + getStuClass() + " 姓名:" + getStuName();
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuClass() {
return stuClass;
}
public void setStuClass(String stuClass) {
this.stuClass = stuClass;
}
}
java程序用命令行帶入?yún)?shù)的形式輸入整數(shù)再用冒泡法排序
看這段代碼吧,希望對(duì)你有幫助
java排序法
package com.cucu.test;
public class Sort {
public void swap(int a[], int i, int j) {
int tmp = a;
a = a[j];
a[j] = tmp;
}
public int partition(int a[], int low, int high) {
int pivot, p_pos, i;
p_pos = low;
pivot = a[p_pos];
for (i = low + 1; i = high; i++) {
if (a pivot) {
p_pos++;
swap(a, p_pos, i);
}
}
swap(a, low, p_pos);
return p_pos;
}
public void quicksort(int a[], int low, int high) {
int pivot;
if (low high) {
pivot = partition(a, low, high);
quicksort(a, low, pivot - 1);
quicksort(a, pivot + 1, high);
}
}
public static void main(String args[]) {
int vec[] = new int[] { 37, 47, 23, -5, 19, 56 };
int temp;
//選擇排序法(Selection Sort)
long begin = System.currentTimeMillis();
for (int k = 0; k 1000000; k++) {
for (int i = 0; i vec.length; i++) {
for (int j = i; j vec.length; j++) {
if (vec[j] vec) {
temp = vec;
vec = vec[j];
vec[j] = temp;
}
}
}
}
long end = System.currentTimeMillis();
System.out.println("選擇法用時(shí)為:" + (end - begin));
//打印排序好的結(jié)果
for (int i = 0; i vec.length; i++) {
System.out.println(vec);
}
// 冒泡排序法(Bubble Sort)
begin = System.currentTimeMillis();
for (int k = 0; k 1000000; k++) {
for (int i = 0; i vec.length; i++) {
for (int j = i; j vec.length - 1; j++) {
if (vec[j + 1] vec[j]) {
temp = vec[j + 1];
vec[j + 1] = vec[j];
vec[j] = temp;
}
}
}
}
end = System.currentTimeMillis();
System.out.println("冒泡法用時(shí)為:" + (end - begin));
//打印排序好的結(jié)果
for (int i = 0; i vec.length; i++) {
System.out.println(vec);
}
//插入排序法(Insertion Sort)
begin = System.currentTimeMillis();
for (int k = 0; k 1000000; k++) {
for (int i = 1; i vec.length; i++) {
int j = i;
while (vec[j - 1] vec) {
vec[j] = vec[j - 1];
j--;
if (j = 0) {
break;
}
}
vec[j] = vec;
}
}
end = System.currentTimeMillis();
System.out.println("插入法用時(shí)為:" + (end - begin));
//打印排序好的結(jié)果
for (int i = 0; i vec.length; i++) {
System.out.println(vec);
}
//快速排序法(Quick Sort)
Sort s = new Sort();
begin = System.currentTimeMillis();
for (int k = 0; k 1000000; k++) {
s.quicksort(vec, 0, 5);
}
end = System.currentTimeMillis();
System.out.println("快速法用時(shí)為:" + (end - begin));
//打印排序好的結(jié)果
for (int i = 0; i vec.length; i++) {
System.out.println(vec);
}
}
}
//------------------------------------
以下是運(yùn)行結(jié)果:
選擇法用時(shí)為:234
56
47
37
23
19
-5
冒泡法用時(shí)為:172
56
47
37
23
19
-5
插入法用時(shí)為:78
56
47
37
23
19
-5
快速法用時(shí)為:297
56
47
37
23
19
-5
Java冒泡排序法,代碼編輯無(wú)報(bào)錯(cuò)提醒,一運(yùn)行就出錯(cuò)==||。求大佬救救孩紙
你這是死記硬背的吧,錯(cuò)誤太多了,邏輯都不同。百度一下冒泡排序法,看看怎么個(gè)原理吧,知道了原理就不會(huì)寫(xiě)錯(cuò)。
附上源代碼:
ublic static void bubbleSort(int []arr) {
int[] arr = {12,23,34,56,56,56,78};
for(int i =0;iarr.length-1;i++) {
boolean bool = true;
for(int j=0;jarr.length-i-1;j++) {//-1為了防止溢出
if(arr[j]arr[j+1]) {
bool = false;
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if(!bool)
break;
}
}
輸入一組數(shù)組 如何用Java按冒泡排序和選擇排序輸出數(shù)組 求代碼
/**
*?2015年5月28日下午9:52:57
*?
*?@author?season?TODO?測(cè)試已通過(guò),獲取財(cái)富值
*
*/
public?class?ArrayOperation?{
/**
*?對(duì)數(shù)組?arr?進(jìn)行冒泡排序升序排序
*?
*?@param?arr
*????????????目標(biāo)數(shù)組
*/
public?static?void?bubbleToUp(int[]?arr)?{
if?(null?==?arr)//?數(shù)組為空時(shí),退出該方法
return;
for?(int?i?=?0;?i??arr.length?-?1;?i++)?{
for?(int?j?=?0;?j??arr.length?-?i?-?1;?j++)?{
if?(arr[j]??arr[j?+?1])?{
int?temp?=?arr[j];
arr[j]?=?arr[j?+?1];
arr[j?+?1]?=?temp;
}
}
}
}
/**
*?使用選擇排序法對(duì)目標(biāo)數(shù)組進(jìn)行降序排序
*?
*?@param?arr
*????????????目標(biāo)數(shù)組
*/
public?static?void?selectToDown(int[]?arr)?{
for?(int?i?=?0;?arr?!=?null??i??arr.length;?i++)?{
int?flag?=?i;
for?(int?j?=?i?+?1;?j??arr.length;?j++)?{
if?(arr[j]??arr[flag])
flag?=?j;
}
if?(flag?!=?i)?{
int?temp?=?arr[i];
arr[i]?=?arr[flag];
arr[flag]?=?temp;
}
}
}
/**
*?遍歷數(shù)組所有元素
*?
*?@param?arr
*????????????目標(biāo)數(shù)組
*/
public?static?void?displayArray(int[]?arr)?{
System.out.println();
for?(int?num?:?arr)
System.out.print("??"?+?num);
}
public?static?void?main(String[]?args)?{
//?初始化數(shù)組
int[]?arr?=?{?20,?-878,?90,?78,?89,?-908?};
//?首先進(jìn)行冒泡排序(升序)
bubbleToUp(arr);
displayArray(arr);
//?然后進(jìn)行選擇排序(降序)
selectToDown(arr);
displayArray(arr);
}
}
冒泡法排序,java代碼 排序1 8 5 2 4 9
public?class?Test?{
public?static?void?main(String[]?args)?{
int[]?a?=?{1,?8,?5,?2,?4,?9};
//冒泡排序
for?(int?k?=?0;?k??a.length?-?1;?k++)?{
for?(int?j?=?k?+?1;?j??a.length;?j++)?{?//?升序把改成
if?(a[k]??a[j])?{
int?temp?=?a[k];
a[k]?=?a[j];
a[j]?=?temp;
}
}
}
System.out.println("排序后:?");
for(int?i?=?0;?i??a.length;?i++){
System.out.print(a[i]?+?"??");
}
}
}
java冒泡排序法代碼
冒泡排序是比較經(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ù)不參與比較;
依次類(lèi)推,每一趟比較次數(shù)-1;
……
舉例說(shuō)明:要排序數(shù)組:int[]?arr={6,3,8,2,9,1};?
for(int i=1;iarr.length;i++){
for(int j=1;jarr.length-i;j++){
//交換位置
} ? ?
參考資料:冒泡排序原理
當(dāng)前標(biāo)題:java冒泡輸入法代碼 輸入一個(gè)字符串,使用冒泡法
分享路徑:http://fisionsoft.com.cn/article/dosogip.html