#include <iostream> using namespace std; //插入排序 void insertsort(int *a,int num) { int in,out; for(out=1;out<num;out++) { int temp=a[out]; in=out; while (in>0 &&a[in-1]>temp) { a[in]=a[in-1]; in--; } a[in]=temp; } } //模板插入排序 template <class T> void insertsort_tem(T *a,int num) { int in,out; for(out=1;out<num;out++) { in=out; int temp=a[out]; while (in>0 && a[in-1]>temp) { a[in]=a[in-1]; in--; } a[in]=temp; } } //快速排序 (速度最快的排序算法) //枢纽 选择一个枢纽 //递归 //template <class T> void fastsort(int *a, const int left, const int right) { if (left<right) { //选枢轴进行划分 int i=left+1; int j=right; int privot=a[right];//选择最有边元素为枢纽 找左边大于枢纽的,右边小于枢纽的 do{ do i++;while (a[i]<privot); do j--;while (a[j]>privot); if (i<j) swap(a[i],a[j]); } while (i<j); swap(a[left],a[j]); //进行递归 小于枢轴的在左边,大于枢轴的在右边 fastsort(a,left,j-1); fastsort(a,j+1,right); } } void myfastsort(int *a,int l,int r) { int i=l; int j=r; int pivot=a[r]; while (i<j) { while (a[i]<pivot) { i++; } while (a[j]>pivot) { j--; } swap(a[i],a[j]); } swap(a[r],a[j]); myfastsort(a,l,j-1); myfastsort(a,j+1,r); } //归并排序 int main() { int list[]={12,3,4,5,6,3,8,9,76,56,34}; double list1[]={1.2,3.4,1.23,3,0.6,4,6,78}; int list3[]={100,2,7,3,45,67,34,23,22,41,88}; int num= sizeof(list)/ sizeof(int); int num1= sizeof(list1)/ sizeof(double); cout<<"num1= "<<num1<<endl; insertsort_tem(list,num); for (int i = 0; i <num ; ++i) { cout<<list[i]<<" "; } cout<<endl; cout<<"-----------------------------"<<endl; insertsort_tem(list1,num1); for (int j = 0; j <num1 ; ++j) { cout<<list1[j]<<" "; } cout<<endl; cout<<"----------------------------------"<<endl; fastsort(list3,1,10); for (int j = 0; j <11 ; j++) { cout<<list3[j]<<" "; } cout<<endl; return 0; }
c++ 实现插入排序,以及快排
最新推荐文章于 2021-12-01 11:46:39 发布