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

关于几个复杂度为N^N的排序算法-冒泡,插入,选择(C++实现)

2016-11-26 10:25 405 查看
//程序是从低到高排序
#include <iostream>
using namespace std;
#include <string>
template <typename T,int size>
void sort_maopao(T *p){
T tmp;
int i,j;
//冒泡的i指的是当次冒泡在第i个位置停止(后面的都是从小到大排好序的),即从p[0] VS p[1]--->p[i] VS p[i+1]
//当次最大结果放在p[j+1],也就是p[i+1]可以定下来。
for (i=size-2;i>=0;i--){
for (j=0;j<=i;j++){
if(p[j]>p[j+1]){
tmp=p[j];
p[j]=p[j+1];
p[j+1]=tmp;
}
}
}
}
template <typename T,int size>
void sort_insert(T *p){
T tmp;
int i,j;
//i是指第i位要插入的数,说明前i-1位已经按照从小到大的顺序排好队
//用while循环,p指针指向希望比较的两个数的前者(所以一开始应该是j=i-1),直到j=0.在这之前肯定能找到相应的位置
for (i=0;i<size;i++){
j=i-1;
while(j>=0&&p[j]>p[j+1]){
tmp=p[j];
p[j]=p[j+1];
p[j+1]=tmp;
j--;
}
}
}
template <typename T ,int size>
void sort_choose(T *p){
int i,j;
T tmp;
//选择排序是最简单的一种,建议新手使用(我就是新手),i表示第i个位置,前面i-1个已经按顺序排好,只要将i后面的数,逐一跟第i个比较,进行替换即可。
for(i=0;i<size;i++){
for(j=i;j<size;j++){
if(p[i]>p[j]){
tmp=p[i];
p[i]=p[j];
p[j]=tmp;
}
}
}
}
//测试数据,可忽略
int main()
{
int k=0;
char a[28]={"CaichunqingisAbeautifulGirl"};
char a1[28]={"CaichunqingisAbeautifulGirl"};
char a2[28]={"CaichunqingisAbeautifulGirl"};
sort_insert<char,27>(a);
sort_maopao<char,27>(a1);
sort_choose<char,27>(a2);
for(k=0;k<28;k++){
cout<<a[k];
}
cout<<endl;
for(k=0;k<28;k++){
cout<<a1[k];
}
cout<<endl;
for(k=0;k<28;k++){
cout<<a2[k];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 C++
相关文章推荐