基于c++实现的几种排序算法
2016-02-23 11:49
393 查看
插入排序是有一个已经有序的数据序列,在这个已经排好的数据数列中插入一个数,要求插入后此数据序列仍然有序。这种算法适用于少量数据的排序,时间复杂度为O(n^2)
冒泡排序是相邻的两个元素比较,像开水冒泡一样,每轮把最大或最小的元素放到最后,一直到所有轮走完,时间复杂度为O(n^2)
选择排序是一种简单的排序算法,每次从待排序的数据中选出最小的元素放在序列起始的位置,直到全部待排序的数据都排完,时间复杂度为O(n^2)
快速排序是找出一个元素作为基准,然后对数组进行分区操作。使基准左边的元素值都不大于基准值,基准右边的元素都不小于基准值,最后基准元素调到排序后的正确位置。然后再把基准左边和基准右边的元素序列分别做以上操作。
void insertsort(int a[],int len){ for(int i=1;i<len;i++){ int j=i-1; int key=a[i]; while(j>=0 && a[j]>key){ a[j+1]=a[j]; j--; } a[j+1]=key; } };
冒泡排序是相邻的两个元素比较,像开水冒泡一样,每轮把最大或最小的元素放到最后,一直到所有轮走完,时间复杂度为O(n^2)
void bubblesort(int a[],int len){ for(int i=1;i<len;i++){ for(int j=0;j<len-i;j++){ if(a[j]>a[j+1]){ int tmp=a[j+1]; a[j+1]=a[j]; a[j]=tmp; } } } }
选择排序是一种简单的排序算法,每次从待排序的数据中选出最小的元素放在序列起始的位置,直到全部待排序的数据都排完,时间复杂度为O(n^2)
void selectsort(int a[],int len){ for(int i=0;i<len;i++){ int min=i; for(int j=i;j<len;j++){ if(a[j]<a[min]){ min=j; } } if(min!=i){ int tmp=a[i]; a[i]=a[min]; a[min]=tmp; } } }
快速排序是找出一个元素作为基准,然后对数组进行分区操作。使基准左边的元素值都不大于基准值,基准右边的元素都不小于基准值,最后基准元素调到排序后的正确位置。然后再把基准左边和基准右边的元素序列分别做以上操作。
void quicksort(int a[],int l,int r){ int i=l; int j=r; int key=a[i]; if(l<r){ while(i<j){ while(j>i && a[j]>key){ j--; } if(j>i){ a[i]=a[j]; i++; } while(i<j && a[i]<key){ i++; } if(j>i){ a[j]=a[i]; j--; } } a[i] =key; quicksort(a,l,i-1); quicksort(a,i+1,r); } }
相关文章推荐
- c与c++区别
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- Service.cpp:10:28: error: within this context
- C与C++内存机制的不同
- C/C++ 内存分配情况
- C语言(头文件格式)
- C++类内存分布
- 常见C++内存池技术
- 关于C++重定义问题
- 【C++】static关键字的作用
- 【C++】友元函数
- 103. Binary Tree Zigzag Level Order Traversal
- C++封装继承多态总结
- C++STL 常用 函数 用法
- C语言编程规范—命名规则
- 【C++】进程和线程
- 【C++】普通函数、虚函数和纯虚函数
- VS2010 C++ 操作Excel表格的编程实现
- C++内存管理
- 常见的C语言内存错误及对策