排序算法是计算机科学中一个至关重要的领域,它在许多应用中都发挥着关键的作用。无论是在数据库管理、数据分析、机器学习,还是在日常的系统操作中,排序都是一种基础且重要的技术。在本文中,我们将深入探讨排序的好处、作用、写法以及示例,以帮助你更好地理解这一主题。
选择排序是一种简单直观的排序算法。它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置。然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
void selectionSort(int arr[], int n) {
int i, j, min_idx;
// One by one move boundary of unsorted subarray
for (i = 0; i < n-1; i++) {
// Find the minimum element in unsorted array
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first element of unsorted array
swap(&arr[min_idx], &arr[i]);
}
}
冒泡排序是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
void bubbleSort(int arr[], int n) {
int i, j;
for (i = 0; i < n-1; i++) {
for (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;
}
}
}
}
快速排序是一种高效的排序算法,其基本思想是分治法。它选择一个基准元素,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分继续进行排序,以达到整个序列有序。
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // Partition array and get pivot index
quickSort(arr, low, pi - 1); // Sort first sub array
quickSort(arr, pi + 1, high); // Sort second sub array
}
}
下面是一个使用C++实现快速排序的示例代码:
#include
#include
using namespace std;
void quicksort(vector& arr, int left, int right) {
if (left >= right) return;
int pivot = arr[left];
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) i++;
arr[j] = arr[i];
}
arr[i] = pivot;
quicksort(arr, left, i - 1);
quicksort(arr, i + 1, right);
}
int main() {
vector arr = {9, 7, 5, 11, 12, 2, 14, 3, 10, 6};
quicksort(arr, 0, arr.size() - 1);
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
这段代码实现了一个基本的快速排序算法。快速排序是一种高效的排序算法,其基本思想是分治法。
代码详解:
#include
和 #include
。std
,这样就可以直接使用标准库中的类型和函数,而不需要在前面加上 std::
。quicksort
函数,它接受一个整数向量 arr
和两个整数 left
和 right
作为参数。这两个参数表示要排序的子数组的范围。a. 如果 left >= right
,则子数组只有一个或没有元素,所以直接返回。
b. 选取 arr[left]
作为基准值(pivot)。
c. 初始化两个指针 i
和 j
,分别指向子数组的开始和结束位置。
d. 使用两个嵌套的 while
循环来重新排列子数组中的元素,使得小于基准值的元素都在基准值的左边,大于基准值的元素都在右边。
e. 最后,递归地对基准值左边和右边的子数组进行同样的操作。
4. main
函数中:
a. 定义一个整数向量 arr
并初始化一些值。
b. 调用 quicksort
函数来对整个向量进行排序。
c. 使用一个循环打印排序后的向量。
d. 打印一个换行符并返回0,表示程序正常结束。
当你运行这段代码时,它会输出排序后的向量:2 3 6 7 9 10 11 12 14
。
在结束这篇文章之前,我想强调的是,排序算法不仅是计算机科学中的重要概念,更是我们日常生活和工作中不可或缺的工具。通过理解并掌握这些算法,我们可以更好地处理数据、解决问题,并提高我们的工作效率。希望这篇文章能帮助你对排序算法有更深入的理解,激发你对计算机科学的兴趣。
最后,都看到这里了,留下一个免费的赞和关注呗~跪谢~
关注我,C++语法中的其它文章同样精彩,持续更新哦!