首页 > 编程知识 正文

常见的几种排序算法有哪些,常用的几种排序算法

时间:2023-05-03 13:54:09 阅读:201530 作者:3455

冒泡排序 复杂度: O ( n 2 ) O(n^2) O(n2)思路分析:
在要排序的一组数中,对当前还未排好的序列中,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒 选择排序 复杂度: O ( n 2 ) O(n^2) O(n2)思路分析:
选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。 插入排序 复杂度: O ( n 2 ) O(n^2) O(n2)思路分析:
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。 快速排序 复杂度:O(nlogn)思路分析: 先从数列中取出一个数作为基准数区分过程,将比这个数大的数全放大它的右边,小于或等于它的数全放到它的左边再对左右区间重复第二步,直到各区间只有一个数 //快速排序,递归条件终止条件是序列只有一个元素void QuickSort(vector<int>& data, int left,int right){int key = right;if (left >= right)return;while (left < right){while (left < right&&data[left] <= data[key]){left++;}while (left < right&&data[right] >= data[key]){right--;}swap(data[left], data[right]);}swap(data[left], data[key]);QuickSort(data, 0, left - 1);QuickSort(data, left + 1, key);} 并归排序 复杂度:O(nlogn)思路分析:
利用并归的思想实现分而治之,如下例图:
void Merge(vector<int>& data,int start ,int mid, int end){ int i=start,j=mid+1; vector<int> tmp; while(i<=mid&&j<=end){ if(data[i]<=data[j]) tmp.push_back(data[i++]); else tmp.push_back(data[j++]); } while(i<=mid) tmp.push_back(data[i++]); while(j<=end) tmp.push_back(data[j++]); i=start,j=0; while(i<=end){ data[i++]=tmp[j++]; }}void MergeSort(vector<int>& data,int start,int end){ if(start<end){ int mid=(start+end)/2; MergeSort(data,start,mid); MergeSort(data,mid+1,end); Merge(data,start,mid,end); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。