快速排序和插入排序的C++实现
来源:互联网 发布:php基础教程 第5版 pdf 编辑:程序博客网 时间:2024/05/20 09:21
本来这是一个很常见的算法,可是接触IT这么长时间了,竟然还不知道这种算法的核心,是在惭愧,最近一直想补习这方面的内容于是也就,开始了我的算法里程,现在就说说快速排序吧,本来我一直是在用冒泡排序的,可是总是被人耻笑,所以呢,现在想想,开始学习吧
快速排序吧,总体流程是这样的,首先将获取最后一个元素,然后呢根据这最后一个元素将数组分开两部分,一部分比该元素小,另一部分比该元素大,这样就分开了,然后呢利用递归调用,直到有部分都分开了,这样就实现了快速排序
// 快速排序.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class Any>int partion(Any* ptr,int l,int r){Any temp=ptr[r];int i=l;//首先将这l和r之间的数据进行排序,或者说将数组根据temp分成两部分for(int j=l;j<r;j++){if(ptr[j]>temp){Any midVal=ptr[i];ptr[i]=ptr[j];ptr[j]=midVal;i++;}}//最后一组进行交换,将temp,或者说ptr[r],放在他应该在的位置上,也就是说ptr[r]的右边的数据都比他大,左边的数据都比他小Any midVal=ptr[i];ptr[i]=ptr[r];ptr[r]=midVal;return i;};template<class Any>void QuickSort(Any* ptr,int l,int r){//使用递归方法调用,一直到最后将l和r中间不再有数据,即完成了排序if(l<r){int middle=partion(ptr,l,r);QuickSort(ptr,l,middle-1);QuickSort(ptr,middle+1,r);}}int _tmain(int argc, _TCHAR* argv[]){double p[7]={10.2,50.3,89,12,65,31,51};QuickSort(p,0,6);for(int i=0;i<7;i++){cout<<p[i]<<" ";}return 0;}
这样就完成了快速排序,也许并不是很标准,但是,也是有收获的啊,快速排序需要注意的有两点因为我们使用递归来完成也就注定了,必须要有递归结束条件这里是if(low>=high);还有就是不断更新first和last的值,进行替换,最后重新定位中枢 a[first]=key; 再次递归的调用需要使用的是low first-1;以及 first+1到high才行
现在看看插入排序,其含义就是假设前n个元素,是排好序的,现在有一个新的元素,要插入到已排好的序列当中去,要做的操作,就是插入排序。
其C++实现代码是这样的
// 插入排序.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class Any>void InsertSort(Any* ptr,int length){for(int i=1;i<length;i++){for(int j=0;j<i;j++){//进行排序 if(ptr[i]>ptr[j]){Any temp=ptr[i];ptr[i]=ptr[j];ptr[j]=temp;}}}}int _tmain(int argc, _TCHAR* argv[]){int ptr[]={10,21,65,35,12,52};InsertSort(ptr,6);for(int i=0;i<6;i++){cout<<ptr[i]<<" ";}return 0;}今天还不错,学习了两种排序算法
0 0
- 直接插入排序、快速排序和堆排序的C实现
- 插入排序、选择排序和快速排序的算法实现
- 快速排序和插入排序的C++实现
- 插入排序/希尔排序/快速排序C语言实现
- 有关的插入排序、选择排序、快速排序和冒泡排序C++的实现
- 快速排序、插入排序、选择排序和冒泡排序的实现
- 数组的插入排序和快速排序
- 快速排序和插入排序
- 插入排序和快速排序
- 插入排序 和 快速排序
- 快速排序和插入排序
- 快速排序和插入排序
- 快速排序和插入排序
- 冒泡排序、插入排序、快速排序的简单实现
- 冒泡排序,快速排序,插入排序的C++实现
- 插入排序的c实现
- OC实现选择、插入和快速排序
- C语言常用的排序方法:冒泡排序,插入排序,快速排序,堆排序,希尔排序
- Linux 系统资源监控常用命令
- 第4周作业-数学学习工具;第4周作业-打字成绩判断程序
- fwrite和fread函数的用法小结
- 好的用户界面:界面设计的一些技巧
- CString多线程内存泄露疑惑
- 快速排序和插入排序的C++实现
- Asynctask解析
- 虚拟化技术漫谈
- 通过signapk.jar 为Android 应用程序签名,并优化签名后的APK应用程序
- Command Injection
- Java EE项目中的异常处理
- 自定义log4j生成的log文件名
- C++错误:“__w64 unsigned int”的前面应有“;”
- keil warning: #1-D: last line of file ends without