c++数组排序的5种方法实例代码
作者:布鲁撸代码
大家还在为大小排序而烦恼吗?今天让我我大家解决这个问题吧,下面这篇文章主要给大家介绍了关于c++数组排序的5种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
方法一:冒泡排序
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
- 重复以上的步骤,每次比较次数-1,直到不需要比较
示例:对数组4,2,8,0,5,7,1,3,9 进行排序
#include<iostream> using namespace std; int main() { int arr[9] = { 4,2,8,0,5,7,1,3,9 }; for (int i = 0; i < 9 - 1; i++) { for (int j = 0; j < 9 - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < 9; i++) { cout << arr[i] << endl; } system("pause"); return 0; }
方法二:sort函数排序
示例:对数组2,4,5,3,1进行排序
sort函数的算法效率相当于快排。
sort 函数默认的是进行升序排序
有两种方法可以进行降序,可自由选择
1. 使用greater<int>()
如果排序其他类型可更改参数
2. 自定义一个比较大小的函数,将大的排在前面
方法三:用交换函数swap排序
… …
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
… …
方法四:快速排序
- 找到分界点x,q[L],q[(L+R)/2],q[R]
- 左边所有数Left<=x,右边所有数Right>=x
- 递归排序Left,递归排序Right
快速排序算法模板:
void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1, x = q[l+r>>1]; //l+r>>1的意思是l+r的值除以2取整 while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j) swap(q[i], q[j]); else break; } quick_sort(q, l, j), quick_sort(q, j + 1, r); }
方法五:归并排序
- 确定分界点:mid=(l+r)/2
- 递归排序Left,递归排序Right
- 归并 —— 合二为一
归并排序算法模板
void merge_sort(int q[], int l, int r) { if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) if (q[i] < q[j]) tmp[k ++ ] = q[i ++ ]; else tmp[k ++ ] = q[j ++ ]; while (i <= mid) tmp[k ++ ] = q[i ++ ]; while (j <= r) tmp[k ++ ] = q[j ++ ]; for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j]; }
总结
到此这篇关于c++数组排序的5种方法的文章就介绍到这了,更多相关c++数组排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!