排序(一) 交换排序:冒泡与快速排序

来源:互联网 发布:高明区司法拍卖淘宝网 编辑:程序博客网 时间:2024/06/09 20:46

冒泡与快排是以前学的知识,但是纸上得来终是浅,自己动手才丰衣足食,自己用代码来实现又是另一回事。


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的有点小用,还没怎么优化,大体思路就这样,亲测代码无误哟!

下期奉上插入排序的两种(直接和希尔),不过我搞不懂希尔排序.....(有什么错误和不足还请指出)
















0 0
原创粉丝点击