排序演算法
有很多,包括
插入排序
,氣泡排序
,堆排序
,歸併排序
,選擇排序,
計數排序
,基數排序
,桶排序
,快速排序
等。插入排序,堆排序,選擇排序,歸併排序和快速排序,氣泡排序都是比較排序,它們通過對
陣列中的元素進行比較來實現排序,其他排序演算法則是利用非比較的其他方法來獲得有關輸入陣列的排序資訊。
一、氣泡排序
氣泡排序(bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。
**實現:
/**
* 氣泡排序
* @param scores
*/public static void bubbleupsort(int scores)
}
} //輸出排序結果
for (int i = 0; i < scores.length; i++)
}
二、選擇排序
簡單選擇排序的基本思想:給定陣列:int arr=;第
1趟排序,在待排序資料arr[1]~arr[n]
中選出最小的
資料,將它與arrr[1]
交換;第
2趟,在待排序
資料arr[2]~arr[n]
中選出最小的
資料,將它與
r[2]
交換;以此類推,第
i趟在待排序
資料arr[i]~arr[n]
中選出最小的
資料,將它與
r[i]
交換,直到全部排序完成。
選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法。
**實現
/**
* 選擇排序
* @param scores
*/public static void selectionsort(int scores)
}//-----------將min與scores[i]進行比較-----------------
if (scores[i]>scores[minindex])
} //輸出排序結果
for (int i = 0; i < scores.length; i++)
}
三、插入排序
有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外(讓陣列多乙個空間才有插入的位置),而第二部分就只包含這乙個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。
插入排序非常類似於整撲克牌。
在開始摸牌時,左手是空的,牌面朝下放在桌上。接著,一次從桌上摸起一張牌,並將它插入到左手一把牌中的
正確位置上。為了找到這張牌的正確位置,要將它與手中已有的牌從右到左地進行比較。無論什麼時候,左手中的牌
都是排好序的。
**實現
/**
* 插入排序
* @param scores
*/public static void insertsort(int scores)
temp = a[left]; // temp中存的就是基準數
i = left;
j = right;
while (i != j)
} // 最終將基準數歸位
a[left] = a[i];
a[i] = temp;
quicksort(a, left, i - 1);// 繼續處理左邊的,這裡是乙個遞迴的過程
quicksort(a, i + 1, right);// 繼續處理右邊的 ,這裡是乙個遞迴的過程
}
完整**:
package mycompare;
public class arrcompare ;
mysort.quicksort(scores, 0, 7);
for (int i = 0; i < scores.length; i++)
system.out.println();
mysort.bubbleupsort(scores);
system.out.println();
mysort.insertsort(scores);
system.out.println();
mysort.selectionsort(scores); }}
class mysort
}} // 輸出排序結果
for (int i = 0; i < scores.length; i++)
} /**
* 選擇排序
* * @param scores
*/public static void selectionsort(int scores)
}// -----------將min與scores[i]進行比較-----------------
if (scores[i] > scores[minindex])
} // 輸出排序結果
for (int i = 0; i < scores.length; i++)
} /**
* 插入排序
* * @param scores
*/public static void insertsort(int scores)
} for (int i = 0; i < scores.length; i++)
} /**
* 快速排序
* @param a
* @param left
* @param right
*/public static void quicksort(int a, int left, int right)
temp = a[left]; // temp中存的就是基準數
i = left;
j = right;
while (i != j)
} // 最終將基準數歸位
a[left] = a[i];
a[i] = temp;
quicksort(a, left, i - 1);// 繼續處理左邊的,這裡是乙個遞迴的過程
quicksort(a, i + 1, right);// 繼續處理右邊的 ,這裡是乙個遞迴的過程
}}
輸出:31 51 64 72 75 88 99 100
31 51 64 72 75 88 99 100
31 51 64 72 75 88 99 100
31 51 64 72 75 88 99 100
python實現冒泡選擇插入快排
通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。def butttle arr for i in range len arr 1 exchange false for j in range len arr i 1 if arr j a...
Java 常用演算法(冒泡 選擇 插入 快排)
氣泡排序是所有排序演算法中最基本 最簡單的一種。思想就是交換排序,通過比較和交換相鄰的資料來達到排序的目的。設陣列的長度為n 1 比較前後相鄰的二個資料,如果前面資料大於後面的資料,就將這二個資料交換。2 這樣對陣列的第0個資料到n 1個資料進行一次遍歷後,最大的乙個資料就 沉 到陣列第n 1個位置...
冒泡 選擇 插入 快排 歸併的實現
冒泡 var arr 29 45,51 68,72 97 外層迴圈,控制趟數,每一次找到乙個最大值 for var i 0 i arr.length 1 i console.log arr 2,4,5,12,31,32,45,52,78,89 插入 function loop arr arr j 1...