c++语言简单排序算法怎么实现
时间: 2023-08-05 13:46:39 浏览: 40
C++语言中有许多简单的排序算法,例如冒泡排序、选择排序和插入排序等。这里以冒泡排序为例进行讲解。
冒泡排序的基本思想是将相邻的两个元素进行比较,如果它们的顺序不对则交换它们的位置。这个过程一直进行到所有元素都排好序为止。
以下是冒泡排序的C++代码实现:
```c++
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])
{
// 交换相邻两个元素的位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
其中,arr[]代表要排序的数组,n代表数组的长度。
冒泡排序的时间复杂度为O(n^2),在数据量较小的情况下可以使用,但是对于大规模数据排序效率较低。
相关问题
c++语言冒泡排序算法
冒泡排序是一种简单且常用的排序算法,它通过不断比较相邻元素并交换位置来实现排序。下面是一个用 C 语言编写的冒泡排序算法示例:
```c
#include <stdio.h>
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]) {
// 交换相邻元素的位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这段代码中,`bubbleSort` 函数实现了冒泡排序算法。`arr` 是待排序的数组,`n` 是数组的长度。通过两个嵌套的循环,每次比较相邻的两个元素并进行交换,直到整个数组按升序排列。最后在 `main` 函数中调用 `bubbleSort` 函数并输出排序结果。以上代码输出的结果为:11 12 22 25 34 64 90。
请使用C++语言实现各种排序算法
好的,下面分别介绍一些常用的排序算法的实现。
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);
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)