前面讲了那么多的排序,不知道有没有人看,如果有人看,就吱一声,也好让我有信心在写下去了!
不管了,还是那句话,写自己的博文,让别人说去吧,现在应该是,写自己的博文,让别人看去吧!看不
看,是你的事,写不写是我的事!好了,废话少说,开始今天的征程——直接选择排序!
算法思想:所谓直接选择排序,如下:
(1) 在一组对象v[i]~v[n - 1]中选择具有最小关键码的对象
(2) 若它不是这组对象中的第一个对象,则将它与这组对象中的第一个对象对调
(3) 在这组对象中剔除这个具有最小关键码的对象,在剩下的对象v[i + 1]~v[n - 1]中重复执行第
(1)、(2)步,直到剩余对象只有一个为止。
说了这么多,你应该懂得~~。
好了,现在来讲讲我的实现方法。首先需要两层循环,为什么,看了,因为看了思路,直觉告诉我
的,现在我就告诉你是两层的。不要问我为什么?外层循环获得一个新的数,现在我的目的是将这个
新数放到数组中的正确地方去。你懂得。你要选择正确的地方,
内层循环就是控制这个选择的。如何选择,没获得一个新的数,你必须要将它们依次和这个数之前的
数进行比较,如果满足条件,什么条件,这个需要看你的了,因为条件有升序和降序之分的。好了,
满足了条件,就进行调换,数组中两个元素的对换那个是不是有点太简单了,我都不好意思提了。好
了。亲手实现吧。代码贴上:
using namespace std;
void DirChooseSort(); //直接选择排序
void main()
{
DirChooseSort();
}
void DirChooseSort()
{
int iNum; //参加排序数的个数
cout<<"请输入参加排序数的个数:";
cin>>iNum;
//判断iNum的有效性
if (iNum <= 0)
{
cout<<"错误的输入值"<<endl;
exit(0);
}
int *Array = new int[iNum]; //动态开辟存放排序数的数组
for (int i = 0; i < iNum; i++)
{
cin>>Array[i];
for (int j = 0; j < i; j++)
{
if (Array[j] > Array[i])
{
int iTemp;
iTemp = Array[i];
Array[i] = Array[j];
Array[j] = iTemp;
}
}
}
//输出排序ok的数组
for (int m = 0; m < iNum; m++)
{
cout<<Array[m]<<",";
}
}
这是我写的代码,如果大家觉得我写的不对,希望大家给我提出,和我一起分享。谢谢!我的宗旨
是,你我共同学习!
现在回过头来看看,直接选择排序和直接插入排序有什么不同吗?