氣泡排序java實現及優化
阿新 • • 發佈:2019-02-04
一 氣泡排序演算法
1 相鄰元素兩兩比較,大的放後面,第一次完畢,最大值在最大索引處
2 java程式碼實現
public static void bubbleSort(int[] arr)
{
for(int i=0; i<arr.length-1; i++)
for(int j=0; j<arr.length-1-i;j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
location = j;
}
}
}
二 程式碼優化
1 當某一趟遍歷沒有交換,就說明已經遍歷好了,就不用再迭代了
public static void sort(int[] arr)
{
int flag; // 標記
for(int i=0; i<arr.length-1 ; i++)
{
flag = 1; // 每一次迭代標記為1
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;
flag = 0 ; // 如果有次序交換,標記為0
}
}
if(flag == 1) // 沒有次序交換,排序完成
break;
}
}
2 記錄每次遍歷資料之後交換次序的位置,顯然這個位置之後的資料已經有序了不用再排序了。因此通過記錄最後發生資料交換的位置就可以確定下次迴圈的範圍了。
public static void sort(int[] arr)
{
int location; // 標記
int n = arr.length - 1; // 初始化最後交換位置為最後一個元素
for(int i=0; i<arr.length-1; i++)
{
location = n; // 記錄最後發生交換的位置
for(int j=0; j<location; j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
n = j; // 記錄無序位置的結束 ,有序從j+1位置開始
}
}
if(n == location) // 沒有次序交換,排序完成
break;
}
}