排序算法之交换排序(Java)

交换排序包括冒泡排序和快速排序


一、冒泡排序(bubbleSort)


该算法是针对已经有一定顺序的序列来进行排序的,如果待排序的序列只有一两个元素是乱序的,用这种方法是最快的;如果待排序的序列是随机的,则这种方法是最慢的。


算法思想:从序列最后一个元素开始,依次和前面的进行比较,如果该元素前面的元素大于它,则交换位置,该元素继续向前探索,如果该元素前面的元素小于它,则该元素停止。然后从该元素前面的那个元素开始继续循环。

排序算法之交换排序(Java)_第1张图片


二、快速排序(quickSort)


算法思想:一分为二,通过一趟排序,将待排序的序列分为两部分,左部分的元素都小于中轴,右部分都大于中轴。

初始化两个指针,low等于序列第一个元素,high等于序列最后一个元素,standard等于序列第一个元素。首先从high开始,依次向前探索,直到发现小于standard的元素,然后该元素和standard元素交换位置。然后low开始向后探索,直到发现大于standard的元素,然后该元素和standard元素交换位置。依次循环,直到low=high。经过一轮结束,以中轴为界分成两部分,该两部分可继续用快速排序进行排序,也可用其他排序算法进行排序

排序算法之交换排序(Java)_第2张图片


Java代码实现:

public class Test { public static void main(String[] args) { System.out.println("请输入想要排序的数字串,数字之间以逗号分隔:"); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); scanner.close(); String array[] = input.split(","); String array2[] = input.split(","); System.out.println("冒泡排序:"); bubbleSort(array); System.out.println("============================"); System.out.println("快速排序"); quickSort(array2); } // 快速排序 private static void quickSort(String[] array2) { int i = 0; int j = array2.length - 1; String standard = array2[0]; boolean flag = true; while (i < j) { String high = array2[j]; String low = array2[i]; if (flag) { if (Integer.parseInt(high) < Integer.parseInt(standard)) { array2[i] = array2[j]; array2[j] = standard; flag = false; } else { j--; } } else { if (Integer.parseInt(low) > Integer.parseInt(standard)) { array2[j] = array2[i]; array2[i] = standard; flag = true; } else { i++; } } } System.out.println("此时中轴为:" + standard + ",位置为:" + i); for (String a : array2) { System.out.print(a + " "); } System.out.println(" "); } // 冒泡排序 private static void bubbleSort(String[] array) { for (int i = 1; i < array.length; i++) { for (int k = 1; k < array.length; k++) { String value = array[array.length - k]; for (int j = array.length - k - 1; j >= 0; j--) { if (Integer.parseInt(value) < Integer.parseInt(array[j])) { array[j + 1] = array[j]; array[j] = value; } else { break; } } } } for (String a : array) { System.out.print(a + " "); } System.out.println(" "); } }

你可能感兴趣的:(排序算法)