sort()的使用方法为sort(begin,end),在一般的编程之中可以直接带入容器的begin()和end()函数来对,容器进行遍历。其函数包含在头文件中,其组成方面主要有两中排序方法(1)插入排序(2)快速排序。STL中定义了一个SORT_MAX变量来进行判断,如果大于SORT_MAX就使用快排,否则使用插排。
(1)插入排序
插入排序的顺序如下,即按照顺序,从第一个数开始向后面依次遍历,寻找后面的元素在前面元素的位置,然后将数字插入进去,所以很容易知道插入排序的时间复杂度为O(n^2)次方,其实现程序如下:
void Insert_Sort(int *num,int n){
int tmp=0;
for(int i=0;i
tmp=num[i];
int j=i-1;
while(j>=0&&tmp
num[j+1]=num[j];
j--;
}
num[j+1]=tmp;
}
}
(2)快速排序
快速排序是一种对于冒泡排序的方法的一种改进,冒泡排序是将两个相邻元素进行交换,而快速排序在此基础上使用了二分法对数组进行操作,确定一个基数的位置,然后对基数右侧的都是比基数大的数字,而左侧都是比它小的数字,然后再进行递归排序。但快速排序并不是一个稳定的排序的方法,其时间复杂度并不是确定的,其平均排序时间复杂度为O(nlogn),但当情况特殊时,其最差的时间复杂度为O(n^2)和冒泡排序相同,其基本排序的规则如下:
int a[101]
void Quicks_Sort(int begin,int end){//带入开始位置和结束位置
if(begin>end)//若开始大于结束
return;
int tmp=a[begin];//确定基数
int i=begin;
int j=end;
while(i!=j){
while(a[j]>=tmp&&j>i)//寻找比基数小的数
j--;
while(a[i]<=tmp&&j>i)//寻找比基数大的数
i++;
if(j>i){//交换两者
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[begin]=a[i];//交换基数和其位置
a[i]=tmp;
Qiicks_Sort(begin,i-1);//左侧迭代
Qicks_Sort(i+1,end);//右侧迭代
}
原文链接:https://blog.csdn.net/u010404530/article/details/79613979