冒泡排序
原理: 比較、交換
- 相鄰元素進行比較,前一個大就交換兩元素,反之不做交換
- 交換(或不交換)之後往後移動一位繼續比較之後的兩元素
- 每完成一輪比較找出最大的元素被排在了最後,因此一共需要比較n-1次
- 下一輪比較的時候可以少比較一個
//冒泡排序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
char[] a = s.toCharArray();
char temp;
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
if (a[j] > a[j+1]) {
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
System.out.println(a);
}
}
時間複雜度
- 若初始序列爲“正序”序列,則只需要進行1趟排序。在排序過程中進行n-1次關鍵字之間的比較,且不移動記錄;反之若初始序列爲“逆序”序列,則將需要n-1趟的排序,需要進行n(n-1)/2次的比較,並做等數量級的交換操作,因此總的時間 複雜度爲O(nn)。
選擇排序
原理:選擇最小(大)、交換
- 1、先在沒有排序的序列中找出最小(或者最大)的元素
- 2、與無需序列最前面的元素交換(即放在無序列的最前面,有序序列的最後面),此時無需序列元素數量減一,有序序列加一
- 3、再從這個無需序列中找出最小(或者最大)元素,重複2,重複這個循環
- 需要進行n-1趟
//選擇排序
import java.util.Scanner;
public class SelectionSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
char[] a = s.toCharArray();
char temp;
int minIndex;
for (int i = 0; i < a.length-1; i++) {
minIndex = i;
for (int j = i+1; j < a.length; j++) {
if (a[j] < a[minIndex]) {
minIndex = j;
}
}
if (i != minIndex) {
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
System.out.println(a);
}
}