之前学习C++笔记,现在温习下也上传到博客保存下,菜鸟打酱油而已。
1.选择排序法
把每一个数据都依次跟自己后面全部数据做对比,然后遇到比自己小的就交换位置
举例图示
代码如下
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define N 10
int _tmain(int argc, _TCHAR* argv[])
{
int i, j, imin(0), a[N], t;
//数组赋值,利用随机赋值方便调试
for(i=0; i<N; i++)
{
a[i] = rand()%90+11;
}
cout<<"排列之前数据:"<<endl;
//输出原始数组赋值
for(i=0; i<N; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
//使用选择法排序
for(j=0; j<N-1; j++)
{
for(i=j+1; i<N; i++)
{
if(a[imin] > a[i])
{
t = a[i];
a[i] = a[imin];
a[imin] = t;
imin = i;
}
}
}
cout<<"排列好之后数据:"<<endl;
for(j=0; j<N; j++)
{
cout<<a[j]<<' ';
}
cout<<endl;
return 0;
}
这个方法比较常用,也是比较常见的。语音描述,两个数据之间进行两两比较,然后按照大小排顺序。
依次类推继续两两比较,第一轮比较结束后可通过监控下一轮两者有没变换顺序,若没则跳过下一轮;通过这个设置来减少比较次数,即是提高效率,代码如下
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define N 10
int _tmain(int argc, _TCHAR* argv[])
{
int i, j, a[N], t;
bool tag;
//数组赋值,利用随机赋值方便调试
for(i=0; i<N; i++)
{
a[i] = rand()%90+11;
}
cout<<"排列之前数据:"<<endl;
//输出原始数组赋值
for(i=0; i<N; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
//使用冒泡法排序
for(j=1; j<=N-1; j++)
{
tag = true;
for(i=0; i<N-j; i++)
{
if(a[i] > a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
tag = false;
}
//if(tag)break;
}
if(tag)break;
cout<<"第"<<j<<"轮排序:";
for(int b=0; b<N; b++)
{
cout<<a[b]<<' ';
}
cout<<endl;
}
cout<<"排列好之后数据:"<<endl;
for(j=0; j<N; j++)
{
cout<<a[j]<<' ';
}
cout<<endl;
return 0;
}