选择排序
-
排序过程:首先找到数组中最小的那个元素,之后,将它和数组中的第一个元素交换位置(如果第一个元素最小,那么它就和自身交换)。再次,在剩下的元素中找到最小元素,并将它和第二个位置上的元素交换。如此往复,直至数组完成排序。
-
动图
-
时间复杂度: O ( n 2 ) O(n^2) O(n2)
-
特点:(1)运行时间和输入无关;(2)交换次数最少
-
Java代码
class MySelectionSort{
public static void selectionSort(int[] a) {
int n = a.length;
for(int i = 0; i < n; ++i) {
int minIndex = i; //用来记录最小元素的索引
for(int j = i + 1; j < n; ++j) {
if(a[j] < a[minIndex])
minIndex = j;
}
//交换a[i]和a[minIndex]
int temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
}
冒泡排序
-
排序过程:比较两两相邻的元素,如果反序则交换,直到没有反序的元素为止。
-
动图
-
时间复杂度: O ( n 2 ) O(n^2) O(n2)
-
Java代码:
class MyBubbleSort{
public static void bubbleSort(int[] a) {
int n = a.length;
for(int i = 0; i < n - 1; ++i) {
for(int j = 0; j < n - i - 1; ++j)
if(a[j] > a[j + 1]) { //出现反序,则交换a[j]和a[j+1]
int temp = a[j];
a[j] = a[j + 1];
a[j + 1]=temp;
}
}
}
}