admin 管理员组文章数量: 887629
2024年1月11日发(作者:网页素材下载工具)
常用的数组排序方法
1. 冒泡排序(Bubble Sort)
冒泡排序是一种简单但效率较低的排序算法。它通过不断比较相邻的元素,并交换顺序不对的元素,从而将较大(或较小)的元素逐渐“冒泡”到数组的一端。
实现冒泡排序的基本思路是从左到右遍历数组,对于每个位置的元素,与其相邻的元素比较,并根据需要交换位置。通过多次遍历,直到没有需要交换的元素,即可得到有序的数组。
冒泡排序代码示例(JavaScript):
function bubbleSort(arr) {
for (let i = 0; i < - 1; i++) {
for (let j = 0; j < - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
2. 选择排序(Selection Sort)
选择排序也是一种简单且直观的排序算法。它通过不断选择数组中的最小(或最大)元素,并与当前位置的元素交换,从而逐步将数组排序。
实现选择排序的基本思路是从左到右遍历数组,对于每个位置的元素,通过一次遍历选择出当前范围内的最小元素,并将其与当前位置的元素交换。通过多次遍历,即可得到有序的数组。
选择排序代码示例(Python):
def selectionSort(arr):
for i in range(len(arr)):
min_index = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
3. 插入排序(Insertion Sort)
插入排序是一种简单但适用于小规模数组或基本有序数组的排序算法。它通过构建有序序列,对于未排序部分的元素,在已排序部分找到合适的位置并插入,从而逐步将数组排序。
实现插入排序的基本思路是从第二个元素开始遍历数组,对于每个元素,与其前面已排序的元素比较,并根据需要移动位置,直到找到合适的位置插入元素。通过多次遍历,即可得到有序的数组。
插入排序代码示例(C++):
void insertionSort(vector
for (int i = 1; i < (); i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
4. 快速排序(Quick Sort)
快速排序是一种常用且高效的排序算法。它通过选择一个基准元素,将数组划分为比基准小和比基准大的两部分,然后递归地对两部分进行排序,从而将整个数组排序。
实现快速排序的基本思路是选择一个基准元素,通过一次遍历将数组分为两部分(小于基准和大于基准),然后分别对两部分进行递归排序。通过多次递归,即可得到有序的数组。
快速排序代码示例(Java):
void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
以上是常用的四个数组排序方法,它们在不同情况下具有不同的优劣势。在实际应用中,我们可以根据具体情况选择合适的排序算法来满足排序需求。无论选择哪种排序算法,算法的正确性和性能都是我们需要关注的重要指标。
版权声明:本文标题:请列举常用的4个数组排序方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704984322h468578.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论