冒泡排序(Bubble Sorting)的基本想法是:透過對待
排序序列從前向後(從下標較小的元素開始),依序比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向後部,就像水底下的氣泡一樣逐漸向上冒。
因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下
來沒有進行過交換,就表示序列有序。
圖解冒泡排序演算法的過程
原始陣列:3, 9, -1, 10, 20
#第一趟排序
(1) 3, 9, -1, 10, 20 // 如果相鄰的元素逆序就交換
(2 ) 3, -1, 9, 10, 20
(3) 3, -1, 9, 10, 20
(4) 3, -1, 9, 10, 20
第二趟排序
(1) -1, 3, 9, 10, 20 //交換
#(2) -1, 3, 9, 10, 20
(3) -1, 3, 9, 10, 20
#第三趟排序
(1) -1, 3, 9, 10, 20
(2) -1, 3, 9, 10, 20
第四趟排序
(1) -1, 3, 9, 10, 20
小結冒泡排序規則
(1) 一共進行數組的大小-1 次大的循環
(2)每一趟排序的次數在逐漸的減少
(3) 如果我們發現在某趟排序中,沒有發生一次交換, 可以提前結束冒泡排序。這個就是最佳化
import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { // TODO Auto-generated method stub int arr[]= {3,9,-1,10,-2}; //第i+1趟排序,将最大的数排在最后 int temp=0;//临时变量 for(int i=0;i<arr.length-1;i++) {//定义第几轮排序 for(int j=0;j<arr.length-1-i;j++) { if(arr[j+1]<arr[j]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } System.out.println("输出第"+(i+1)+"趟排序的结果"); System.out.println(Arrays.toString(arr)); } } }
運行結果:
輸出第1趟排序的結果
[3, -1, 9, -2, 10]
輸出第2趟排序的結果
[-1, 3, -2, 9, 10]
輸出第3趟排序的結果
[-1, -2, 3, 9, 10]
輸出第4趟排序的結果
[-2, -1, 3, 9, 10]
排序想法:
原始的陣列: 101, 34, 119, 1
第一輪排序: 1, 34, 119, 101
第二輪排序: 1, 34, 119, 101
第三輪排序: 1, 34, 101, 119
#說明:
#1.選擇排序一共有數組大小- 1 輪排序
2.每1輪排序,又是一個循環, 循環的規則(代碼)
2.1先假定目前這個數是最小數
2.2 然後和後面的每個數進行比較,如果發現有比目前數更小的數,就重新確定最小數,並得到下標
2.3 當遍歷到陣列的最後時,就得到本輪最小數與下標
2.4 交換[程式碼中再繼續說]
import java.util.Arrays; public class QuickSort { public static void main(String[] args) { //int []arr={ 8,3,2,1,7,4,6,5}; int [] arr={101,34,109,1}; quicksort(arr); } public static void quicksort(int []arr){ for(int j=0;j<arr.length-1;j++) { int minindex=j;//假定当前下标为最小值下标 int minnumber=arr[j];//假定当前元素为最小值 for (int i = 1+j; i < arr.length; i++) { if (arr[i] < minnumber) {//若假定最小值并不是最小的 minnumber = arr[i];//重置minnumber minindex = i;//重置minindex } } //将最小值交换 arr[minindex] = arr[j]; arr[j] = minnumber; System.out.println("第"+(j+1)+"轮"); System.out.println(Arrays.toString(arr)); } } }
以上是java實作冒泡排序和選擇排序的程式碼怎麼寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!