数据结构复习—排序实现总结(Java实现)

你的名字 2023-02-21 02:24 62阅读 0赞

冒泡排序

n-1趟排序,每趟都能确定一个位置。

  1. public class BubbleSort {
  2. private static void bubbleSort(int[] arr) {
  3. boolean isSwap;
  4. int n = arr.length;
  5. // n-1趟
  6. for (int i = 0; i < n - 1; i++) {
  7. // 从后到前,两两交换,每趟都能确定一个位置
  8. // 判断这一趟是否有交换,如无,则已经有序
  9. isSwap = false;
  10. for (int j = n - 1; j > 0; j--) {
  11. if (arr[j - 1] > arr[j]) {
  12. //交换操作
  13. int tmp = arr[j - 1];
  14. arr[j - 1] = arr[j];
  15. arr[j] = tmp;
  16. isSwap = true;
  17. }
  18. }
  19. if (!isSwap) {
  20. break;
  21. }
  22. }
  23. //打印
  24. System.out.println(Arrays.toString(arr));
  25. }
  26. public static void main(String[] args) {
  27. int[] arr = {
  28. 9, 8, 7, 6, 5, 4, 3, 2, 1};
  29. int[] arr1 = {
  30. 55,425,33,22,65,789};
  31. bubbleSort(arr);
  32. bubbleSort(arr1);
  33. }
  34. }
  35. // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  36. // [22, 33, 55, 65, 425, 789]
  37. // Process finished with exit code 0

快速排序

快速排序主要是划分和递归两个操作。在一次划分之后,可以将序列分为两个小序列,再分别递归进行同样的操作。

划分,思想为:以一个元素作为轴,表中比轴大的元素往右走,表中比轴小的元素向左移动。

具体实现为:以严书为例,初始选择第一个元素为”枢纽“,然后不断地:”从high向左寻找比枢纽小的元素,并与low进行交换,再从low向右寻找比枢纽大的,与high进行交换” ,直到low等于high

以上便是一次划分。

  1. public static int partition(int[] arr,int low,int high)
  2. {
  3. int flag = arr[low];
  4. while(low<high)
  5. {
  6. while(low<high && arr[high]>=flag) {
  7. --high;
  8. }
  9. arr[low] = arr[high];
  10. while(low<high && arr[low]<=flag) {
  11. ++low;
  12. }
  13. arr[high] = arr[low];
  14. }
  15. arr[low] = flag;
  16. return low;
  17. }

递归操作

  1. public static void quickSort(int[] arr,int low,int high)
  2. {
  3. if(low<high)
  4. {
  5. // 这里的flag也就是快速排序划分过程中的"枢纽"
  6. int flag = partition(arr,low,high);
  7. quickSort(arr,low,flag-1);
  8. quickSort(arr,flag+1,high);
  9. }
  10. }
  11. public static void main(String[] args) {
  12. int[] arr = {
  13. 9, 8, 7, 6, 5, 4, 3, 2, 1};
  14. quickSort(arr,0,arr.length-1);
  15. //打印
  16. System.out.println(Arrays.toString(arr));
  17. }
  18. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

简单选择排序

思想:每次从待排序列中,选择关键字最小(最大)的,放到有序序列中。

  1. public static void selectSort(int[] arr)
  2. {
  3. for(int i=0;i<arr.length-1;i++)
  4. {
  5. int min = i;
  6. // 找到最小值
  7. for(int j=i+1;j<arr.length;j++)
  8. {
  9. if(arr[min]>arr[j])
  10. {
  11. min = j;
  12. }
  13. }
  14. // 交换
  15. if(min != i)
  16. {
  17. int temp = arr[min];
  18. arr[min] = arr[i];
  19. arr[i] = temp;
  20. }
  21. }
  22. System.out.println(Arrays.toString(arr));
  23. }

发表评论

表情:
评论列表 (有 0 条评论,62人围观)

还没有评论,来说两句吧...

相关阅读