冒泡与快排是以前学的知识,但是纸上得来终是浅,自己动手才丰衣足食,自己用代码来实现又是另一回事。
1. 冒泡排序:
冒泡排序的平均时间复杂度O(n^2),最坏的是的遇到顺序变逆序或者逆序变顺序。
空间复杂度O(1),即所需空间为常量,与n无关。
完整java代码:
import java.util.Scanner;
public class BubbleSort {
public static void main(String[] args) {
BubbleSort bubble = new BubbleSort();
char[] ch = bubble.getChar();
bubble.bubbleSort(ch);
System.out.println(ch);
}
public void bubbleSort(char[] c) {
char temp;
for (int i = 0, len = c.length - 1; i < len; i++) {
for (int j = 0; j < len - i; j++) {
if (c[j] > c[j + 1]) {
temp = c[j + 1];
c[j + 1] = c[j];
c[j] = temp;
}
}
}
}
public char[] getChar() {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
return str.toCharArray();
}
}
2. 快速排序:
快排平均时间复杂度O(nlogn),其实我也不是搞得很懂时间空间复杂度,不过,代码还是会写的。
完整java代码:
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args) {
QuickSort sort = new QuickSort();
char[] list = sort.getChar();
sort.sort(list, 0, list.length - 1);
System.out.println(list);
}
private int quickSort(char[] arr, int low, int high) {
int left = low;
int right = high;//其实这两行也是没必要。
char temp = arr[low];
while (left < right) {
while (left < right && temp <= arr[right])
right--;
arr[left] = arr[right];
while (left < right && temp >= arr[left])
left++;
arr[right] = arr[left];
}
arr[left] = temp;
return left;
}
private void sort(char[] arr, int low, int high) {
int key;
key = this.quickSort(arr, low, high);
if (low < key - 1)
sort(arr, low, key - 1);
if (key + 1 < high) //这两个if语句不能分开写我觉得
sort(arr, key + 1, high);
}
private char[] getChar() {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
return str.toCharArray();
}
}
PS:是用java写的,对学java的有点小用,还没怎么优化,大体思路就这样,亲测代码无误哟!
下期奉上插入排序的两种(直接和希尔),不过我搞不懂希尔排序.....(有什么错误和不足还请指出)