1、倆倆比較,大的放在後面,第一次排序後最大值已在陣列末尾。
2、因為需要倆倆比較,需要n-1趟排序,比如10個數,需要9趟排序
3、兩個for迴圈,外層迴圈控制排序的趟數,內層迴圈控制比較的次數,每趟過後,比較的次數都應該要減1
4、如果一趟排序後沒有發生位置交換,說明已經有序,不需要繼續迴圈了
/**
* 氣泡排序
* *@author kaifeng
*/public
class
bubblesort ;
//是否排好序,預設值-1,正在排序
int ischange = -1;
//外層迴圈是排序的趟數
for (int i = 0; i < arrays.length - 1; i++)
}//如果比較完一趟沒有發生置換,那麼說明已經排好序了,不需要再執行下去了
if (ischange == 0)
}system.out.println("氣泡排序結果:" + arrays.tostring(arrays));
}}
找到陣列中最大的元素,與陣列最後一位元素交換,
當只有乙個數時,則不需要選擇了,因此需要n-1趟排序,比如10個數,需要9趟排序
兩個for迴圈,外層迴圈控制排序的趟數,內層迴圈找到當前趟數的最大值,隨後與當前趟陣列最後的一位元素交換
/**
* 選擇排序
* *@author kaifeng
*/public
class
selectsort ;
int pos = 0;
//外層迴圈控制需要排序的趟數
for (int i = 0; i < arrays.length - 1; i++)
}//交換
temp = arrays[pos];
arrays[pos] = arrays[arrays.length - 1 - i];
arrays[arrays.length - 1 - i] = temp;
}system.out.println("選擇排序結果:" + arrays.tostring(arrays));
}}
將乙個元素插入到已有序的陣列中,在初始時未知是否存在有序的資料,因此將元素第乙個元素看成是有序的
與有序的陣列進行比較,比它大則直接放入,比它小則移動陣列元素的位置,找到個合適的位置插入
當只有乙個數時,則不需要插入了,因此需要n-1趟排序,比如10個數,需要9趟排序
乙個for迴圈內嵌乙個while迴圈實現,外層for迴圈控制需要排序的趟數,while迴圈找到合適的插入位置(並且插入的位置不能小於0)
/**
*@author kaifeng
*/public
class
insertsort ;
//臨時變數
int temp;
//外層迴圈控制需要排序的趟數,下標從1開始
for (int i = 1; i < arrays.length; i++)
//退出了迴圈說明找到了合適的位置了,將當前資料插入合適的位置中
arrays[j + 1] = temp;
}system.out.println("選擇排序結果:" + arrays.tostring(arrays));
}}
在陣列中找乙個元素,比它小的放在節點的左邊,比它大的放在節點右邊。一趟下來,比節點小的在左邊,比節點大的在右邊。
/**
* 快速排序,使用遞迴實現
* *@author kaifeng
*/public
class
quicksort ;
quicksort(arrays, 0, arrays.length - 1);
system.out.println(arrays.tostring(arrays));
}/**
* 快速排序
**@param arr 待排序陣列
*@param first 指向陣列第乙個元素
*@param end 指向陣列最後乙個元素
*/public
static
void
quicksort(int arr, int first, int end)
//尋找直到比中間點小的數
while (pivot < arr[j])
//此時已經分別找到了比中間點的數(右邊)、比中間點的數(左邊),它們進行交換
if (i <= j)
}//上面乙個while保證了第一趟排序中間點的左邊比中間點小,中間點的右邊比中間點大了。
//「左邊」再做排序,直到左邊剩下乙個數(遞迴出口)
if (first < j)
//「右邊」再做排序,直到右邊剩下乙個數(遞迴出口)
if (i < end)
}}
演算法基礎(1) 氣泡排序
使用c 編寫氣泡排序類,成員函式bubblesort 對雙精度型內建陣列進行氣泡排序,標頭檔案為mysort.h,實現檔案為mysort.cpp,vec和length分別為陣列的首位址和陣列長度 下面展示mysort.h 與 mysort.cpp。ifndef my sort define my s...
演算法基礎1 插入排序
一 插入排序 在許多經典的書籍中,插入排序的演算法涉及到兩張牌 1 遞迴牌 2 當前牌。具體的視覺化的步驟如下圖 上圖即為插入排序基本的實現過程。1 key與遍歷集合中的每乙個元素進行比較。key a j i j 1 往左遍歷 2 尋找插入的位置 while i 0 and a i key a i ...
演算法導論學習筆記 1 基礎排序演算法
最近從頭開始學習演算法導論,作為乙個非計算機專業的學生,我的目的也就是為了找工作的時候能多點籌碼 但是學習過程中還是有不少收穫的,順便也能練習下python程式設計水平,因此記錄下學習內容 第一章是演算法基礎,這裡介紹了2種排序方法 插入排序和歸併排序 例子還算比較淺顯易懂。對於插入排序,可以用乙個...