c++常见的排序算法(不定期更新)
来源:互联网 发布:redis数据穿透 编辑:程序博客网 时间:2024/06/08 12:33
整理一下自己学过的排序算法,顺便当复习了
(一)冒泡排序BubbleSort
思路:运用双层for循环,外层用来判定一共需要排序几次,内层决定每次排序的终点位置;
注意事项:当把排序当封装时,一定要运用引用或指针,保证交换改变了原本的数据;
完整代码演示:
#include<iostream>#include<vector>using namespace std;//!!!注意,当把排序当封装时,一定要运用引用或指针,保证交换改变了原本的数据;void BubbleSort(vector<int> &a,int num){ for (int i = 0; i < num; i++) { for (int j = 0; j <num-i-1 ; j++) { if (a[j] > a[j + 1]) { swap(a[j], a[j + 1]); } } }}int main(){ vector<int>a = { 2,4,1,5,7,4,9,3 }; int num; num=a.size(); BubbleSort(a, num); for (int i = 0; i < num; i++) { cout << a[i] << " " ; } cout << endl; return 0;}
(二)快速排序QuitSort
思路:定义两个指针(left,right),分别指向数组的最左和右边,将temp赋予数组第一个元素,temp用来作为本轮排序的分界线,将比temp小的元素放在左边,比temp大的放在右边,具体的做法为:
(1)先把a[left]赋值给temp,相当于在left处刨了一个空白的坑,值给temp处保存,再保证left
#include <iostream>using namespace std;void Qsort(int* a, int start, int end){ //必须要写,不写停止运行 if (start >= end) { return; } int left = start; int right = end; int temp = a[left]; while (left < right) { while (left < right && a[right] >= temp)//left<right必须要写,a[right]>temp需要写=,否则停止运行 { --right; } a[left] = a[right]; while (left < right && a[left] <= temp) { ++left; } a[right] = a[left]; } a[left] = temp; Qsort(a, start, left - 1); Qsort(a, left + 1, end);}int main(){ int a[] = { 4,2,1,5,7,4,9,3 };//测试用例包含重复值以及重复值为第一位 int num; num = sizeof(a) / sizeof(a[0]);//很6的写法 Qsort(a, 0,num - 1); for (int i = 0; i < num; i++) { cout << a[i] << " "; } cout << endl; return 0;}
至于快速排序使用vector排序的正确代码,还没弄出来2333,有时间再弄吧
阅读全文
1 0
- c++常见的排序算法(不定期更新)
- C语言不常见代码(不定期更新)
- 各种排序算法汇总(JAVA版,不定期更新)
- 常见排序算法的C语言实现以及算法复杂度分析(持续更新)
- eclipse建javaEE项目的常见错误(不定期更新)
- 常见背景音(不定期更新)
- MFC 常见错误(不定期更新)
- 不定期更新一些常见/不常见的缩写全称
- C语言的细节(不定期更新)
- ubuntu常见不常见用法(不定期更新)
- 算法总结--不定期更新
- C-Free 问题集(不定期更新)
- PIC常见错误-不定期更新
- Android studio在使用过程中常见的问题及解决方法(不定期更新)
- Android studio在使用过程中常见的问题及解决方法(不定期更新),androidstudi
- COCOS2D-x移植常见错误(不定期更新)
- Android面试常见知识点【一】(不定期更新)
- Android面试常见知识点【二】(不定期更新)
- Numpy 快览(一)
- composer安装laravel
- Python 命名列
- Android QQ等第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
- dll按照函数序号进行调用的方法
- c++常见的排序算法(不定期更新)
- B/S下基于LODOP控件客户端自动打印小票
- ForegroundColorSpan 设置textView字体颜色有问题
- 10.5-全栈Java笔记:常见流详解(三)
- 软件中的质量属性(一)
- 一个各种样式的图片框架
- 一则利用内核漏洞获取root权限的案例
- [Leetcode] 242. Valid Anagram 解题报告
- 插件 select2.js