holyya.com
2025-09-08 22:54:25 Monday
登录
文章检索 我的文章 写文章
学习冒泡排序
2023-06-10 09:38:03 深夜i     --     --

看到题目,我想起了我在CSDN上学习Java排序算法的时光。在这几个月里,我不断地进行着实践和学习,以提高自己的编程能力和实践经验。下面我将和大家分享一下我对Java排序算法的学习心得和代码实例。

关键词一:冒泡排序

冒泡排序是一种基础而常见的排序算法。在Java中,我们可以使用双重循环的方式来实现冒泡排序。下面是一个简单的例子:


public static void bubbleSort(int[] arr) {

int n = arr.length;

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

if (arr[j] > arr[j + 1]) {

// swap arr[j+1] and arr[j]

int temp = arr[j];

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

arr[j + 1] = temp;

}

}

}

}

关键词二:快速排序

快速排序是一种高效的排序算法,其时间复杂度通常为O(n log n)。在Java中,我们可以用递归的方式来实现快速排序。下面是一个简单的例子:


public static void quickSort(int[] arr, int low, int high) {

if (low < high) {

// pi is partitioning index, arr[pi] is now at right place

int pi = partition(arr, low, high);

// Recursively sort elements before partition and after partition

quickSort(arr, low, pi - 1);

quickSort(arr, pi + 1, high);

}

}

public static int partition(int[] arr, int low, int high) {

// pivot (Element to be placed at right position)

int pivot = arr[high];

int i = (low - 1);  // Index of smaller element

for (int j = low; j < high; j++) {

// If current element is smaller than or equal to pivot

if (arr[j] <= pivot) {

i++;

// swap arr[i] and arr[j]

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

// swap arr[i+1] and arr[high]

int temp = arr[i + 1];

arr[i + 1] = arr[high];

arr[high] = temp;

return i + 1;

}

关键词三:归并排序

归并排序是一种稳定的排序算法,在Java中可以用递归和迭代的方式来实现。下面是一个递归实现的例子:


public static void mergeSort(int[] arr, int l, int r) {

if (l < r) {

// Find the middle point

int m = (l + r) / 2;

// Sort first and second halves

mergeSort(arr, l, m);

mergeSort(arr, m + 1, r);

// Merge the sorted halves

merge(arr, l, m, r);

}

}

public static void merge(int[] arr, int l, int m, int r) {

// Sizes of two subarrays to be merged

int n1 = m - l + 1;

int n2 = r - m;

// Create temp arrays

int[] L = new int[n1];

int[] R = new int[n2];

// Copy data to temp arrays

for (int i = 0; i < n1; ++i)

L[i] = arr[l + i];

for (int j = 0; j < n2; ++j)

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

// Merge the temp arrays

// Initial indexes of first and second subarrays

int i = 0, j = 0;

// Initial index of merged subarray array

int k = l;

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i++;

} else {

arr[k] = R[j];

j++;

}

k++;

}

// Copy remaining elements of L[] if any

while (i < n1) {

arr[k] = L[i];

i++;

k++;

}

// Copy remaining elements of R[] if any

while (j < n2) {

arr[k] = R[j];

j++;

k++;

}

}

综上所述,Java中有多种排序算法可以使用,每种算法都有其特点和适用场景。通过实践和比较不同算法的时间和空间复杂度,我们可以更好地了解各种算法的优劣,并在实际开发中选择最佳的算法。

  
  

评论区

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