快速排序和插入排序的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
原创粉丝点击