您的位置:首页 > 编程语言 > C语言/C++

基于c++实现的几种排序算法

2016-02-23 11:49 393 查看
插入排序是有一个已经有序的数据序列,在这个已经排好的数据数列中插入一个数,要求插入后此数据序列仍然有序。这种算法适用于少量数据的排序,时间复杂度为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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: