21xrx.com
2025-03-13 23:45:53 Thursday
登录
文章检索 我的文章 写文章
Java排序的时间复杂度以及实例分析
2023-06-15 07:31:35 深夜i     --     --
Java排序 时间复杂度 插入排序 归并排序 快速排序

Java中的排序算法是程序员们在日常开发中经常使用的一个重要部分。对于不同的排序算法,其时间复杂度也不相同,因此,本文将介绍Java中常见的排序算法的时间复杂度,并介绍排序算法的具体实现。这样,大家就可以根据自己的需求选择合适的排序算法。

1. 插入排序

插入排序的时间复杂度为O(n^2),其主要思路是将待排序的数插入到已排序序列中的合适位置。下面是插入排序的Java代码实现:


public static void insertionSort(int[] arr) {

  for (int i = 1; i < arr.length; i++) {

    int temp = arr[i];

    int j = i - 1;

    while (j >= 0 && arr[j] > temp) {

      arr[j + 1] = arr[j];

      j--;

    }

    arr[j + 1] = temp;

  }

}

2. 归并排序

归并排序的时间复杂度为O(n log n),其主要思路是将待排序序列分成若干个子序列,对每个子序列进行排序,然后再将排好序的子序列合并起来。下面是归并排序的Java代码实现:


public static void mergeSort(int[] arr, int left, int right) {

  if (left < right) {

    int mid = (left + right) / 2;

    mergeSort(arr, left, mid);

    mergeSort(arr, mid + 1, right);

    merge(arr, left, mid, right);

  }

}

public static void merge(int[] arr, int left, int mid, int right) {

  int[] temp = new int[arr.length];

  int i = left;

  int j = mid + 1;

  int k = left;

  while (i <= mid && j <= right) {

    if (arr[i] <= arr[j]) {

      temp[k++] = arr[i++];

    } else {

      temp[k++] = arr[j++];

    }

  }

  while (i <= mid) {

    temp[k++] = arr[i++];

  }

  while (j <= right) {

    temp[k++] = arr[j++];

  }

  for (int l = left; l <= right; l++) {

    arr[l] = temp[l];

  }

}

3. 快速排序

快速排序的时间复杂度为O(n log n),其主要思路是选取一个基准元素,将待排序序列分成两部分,在其中一部分中寻找比基准元素小的数,在另一部分中寻找比基准元素大的数,然后将找到的两个数进行交换。下面是快速排序的Java代码实现:


public static void quickSort(int[] arr, int left, int right) {

  if (left < right) {

    int p = partition(arr, left, right);

    quickSort(arr, left, p - 1);

    quickSort(arr, p + 1, right);

  }

}

public static int partition(int[] arr, int left, int right) {

  int pivot = arr[left];

  int i = left + 1;

  int j = right;

  while (true) {

    while (i <= j && arr[i] <= pivot) {

      i++;

    }

    while (i <= j && arr[j] >= pivot)

      j--;

    

    if (i > j)

      break;

    

    int temp = arr[i];

    arr[i] = arr[j];

    arr[j] = temp;

  }

  int temp = arr[left];

  arr[left] = arr[j];

  arr[j] = temp;

  return j;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复