请使用C++语言实现各种排序算法
时间: 2023-06-24 19:07:59 浏览: 71
好的,下面分别介绍一些常用的排序算法的实现。
1. 冒泡排序
冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就交换它们。
```cpp
void bubbleSort(int arr[], int n) {
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], arr[j+1]);
}
}
}
}
```
2. 选择排序
选择排序是一种简单直观的排序算法。选择排序的主要思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
```cpp
void selectionSort(int arr[], int n) {
int minIndex;
for (int i = 0; i < n-1; i++) {
minIndex = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
}
```
3. 插入排序
插入排序是一种简单直观的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
```cpp
void insertionSort(int arr[], int n) {
int current;
int j;
for (int i = 1; i < n; i++) {
current = arr[i];
j = i-1;
while (j >= 0 && arr[j] > current) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = current;
}
}
```
4. 快速排序
快速排序是一种分治的排序算法。它的基本思想是通过一趟排序将待排序列分成两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再按此方法对这两部分分别进行快速排序,以达到整个序列有序的目的。
```cpp
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left;
int 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);
}
```
5. 归并排序
归并排序是采用分治法的一个非常典型的应用。归并排序的核心思想是分治,先递归地将要排序的序列分成两个子序列,然后将两个子序列合并成一个有序的序列。
```cpp
void merge(int arr[], int left, int mid, int right) {
int i = left;
int j = mid+1;
int k = 0;
int *temp = new int[right-left+1];
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 p = 0; p < k; p++) {
arr[left+p] = temp[p];
}
delete[] temp;
}
void mergeSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
merge(arr, left, mid, right);
}
```