java 快速排序,冒泡排序
快速排序:網上說是冒泡排序的一種改進。
思路:比如要排序的是 String[] strVoid = new String[] { "11", "66", "0", "55", "22"};
1找到一個比較點 這裏選擇中間的數 0,然後找到這個數左邊的比這個數大的數,在找的這個數右邊的比這個數小的數,然後對找到的兩個數互換位置,
接下來使用左邊數中的下一個數,【即下標加1】,使用右邊數中的下一個數,【即下標減1】,如果左邊數的下標小於等於右邊數的下標,則繼續執行剛纔的比較【即上面1】, 如果左邊數的下標不小於等於右邊數的下標,把左邊數的下標作爲下一次遞歸的開始值的下標,再次執行遞歸,
切記:遞歸的特點,遞歸結束後,要一層一層出來,要執行開始遞歸時沒有執行的代碼。
參考代碼:如下代碼 來源於 :轉載!!!
public class QuickSort {
/**
* 快速排序
*
* @param strDate
* @param left
* @param right
*/
public void quickSort(String[] strDate, int left, int right) {
String middle, tempDate;
int i, j;
i = left;
j = right;
middle = strDate[(i + j) / 2];
do {
while (strDate[i].compareTo(middle) < 0 && i < right)
i++; // 找出左邊比中間值大的數
while (strDate[j].compareTo(middle) > 0 && j > left)
j--; // 找出右邊比中間值小的數
if (i <= j) { // 將左邊大的數和右邊小的數進行替換
tempDate = strDate[i];
strDate[i] = strDate[j];
strDate[j] = tempDate;
i++;
j--;
}
} while (i <= j); // 當兩者交錯時停止
if (i < right) {
quickSort(strDate, i, right);// 從
}
//如下if條件代碼可能是上面 i<right條件中執行遞歸時沒有執行到的代碼,在遞歸結束後依舊要由內向外完成執行,執行次數是遞歸的次數
if (j > left) {
quickSort(strDate, left, j);
}
}
public static void main(String[] args) {
String[] strVoid = new String[] { "11", "66", "0", "55", "22"};
QuickSort sort = new QuickSort();
sort.quickSort(strVoid, 0, strVoid.length - 1);
for (int i = 0; i < strVoid.length; i++) {
System.out.println(strVoid[i] + " ");
}
}
}
冒泡排序:顧名思義,一連串泡泡往外冒,最後小泡泡把大泡泡頂上來了,最大的到了最上面,在冒一次,第二大的泡泡又被頂上來了,依次進行。
【轉載】冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
參考代碼:如下代碼 來源於 :轉載!!!
public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //對當前無序區間score[0......length-i-1]進行排序(j的範圍很關鍵,這個範圍是在逐步縮小的)
if(score[j] < score[j + 1]){ //把小的值交換到後面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序結果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最終排序結果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
}
}
轉自http://blog.csdn.net/mycup163/article/details/7053693
思路:比如要排序的是 String[] strVoid = new String[] { "11", "66", "0", "55", "22"};
1找到一個比較點 這裏選擇中間的數 0,然後找到這個數左邊的比這個數大的數,在找的這個數右邊的比這個數小的數,然後對找到的兩個數互換位置,
接下來使用左邊數中的下一個數,【即下標加1】,使用右邊數中的下一個數,【即下標減1】,如果左邊數的下標小於等於右邊數的下標,則繼續執行剛纔的比較【即上面1】, 如果左邊數的下標不小於等於右邊數的下標,把左邊數的下標作爲下一次遞歸的開始值的下標,再次執行遞歸,
切記:遞歸的特點,遞歸結束後,要一層一層出來,要執行開始遞歸時沒有執行的代碼。
參考代碼:如下代碼 來源於 :轉載!!!
public class QuickSort {
/**
* 快速排序
*
* @param strDate
* @param left
* @param right
*/
public void quickSort(String[] strDate, int left, int right) {
String middle, tempDate;
int i, j;
i = left;
j = right;
middle = strDate[(i + j) / 2];
do {
while (strDate[i].compareTo(middle) < 0 && i < right)
i++; // 找出左邊比中間值大的數
while (strDate[j].compareTo(middle) > 0 && j > left)
j--; // 找出右邊比中間值小的數
if (i <= j) { // 將左邊大的數和右邊小的數進行替換
tempDate = strDate[i];
strDate[i] = strDate[j];
strDate[j] = tempDate;
i++;
j--;
}
} while (i <= j); // 當兩者交錯時停止
if (i < right) {
quickSort(strDate, i, right);// 從
}
//如下if條件代碼可能是上面 i<right條件中執行遞歸時沒有執行到的代碼,在遞歸結束後依舊要由內向外完成執行,執行次數是遞歸的次數
if (j > left) {
quickSort(strDate, left, j);
}
}
public static void main(String[] args) {
String[] strVoid = new String[] { "11", "66", "0", "55", "22"};
QuickSort sort = new QuickSort();
sort.quickSort(strVoid, 0, strVoid.length - 1);
for (int i = 0; i < strVoid.length; i++) {
System.out.println(strVoid[i] + " ");
}
}
}
冒泡排序:顧名思義,一連串泡泡往外冒,最後小泡泡把大泡泡頂上來了,最大的到了最上面,在冒一次,第二大的泡泡又被頂上來了,依次進行。
【轉載】冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
參考代碼:如下代碼 來源於 :轉載!!!
public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //對當前無序區間score[0......length-i-1]進行排序(j的範圍很關鍵,這個範圍是在逐步縮小的)
if(score[j] < score[j + 1]){ //把小的值交換到後面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序結果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最終排序結果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
}
}
轉自http://blog.csdn.net/mycup163/article/details/7053693
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.