您的位置:首页 > 其它

算法不会,尚能饭否之排序——直接选择排序

2011-03-20 19:45 197 查看
前面讲了那么多的排序,不知道有没有人看,如果有人看,就吱一声,也好让我有信心在写下去了!

不管了,还是那句话,写自己的博文,让别人说去吧,现在应该是,写自己的博文,让别人看去吧!看不

看,是你的事,写不写是我的事!好了,废话少说,开始今天的征程——直接选择排序!

算法思想:所谓直接选择排序,如下:

(1) 在一组对象v[i]~v[n - 1]中选择具有最小关键码的对象

(2) 若它不是这组对象中的第一个对象,则将它与这组对象中的第一个对象对调

(3) 在这组对象中剔除这个具有最小关键码的对象,在剩下的对象v[i + 1]~v[n - 1]中重复执行第

(1)、(2)步,直到剩余对象只有一个为止。

说了这么多,你应该懂得~~。

好了,现在来讲讲我的实现方法。首先需要两层循环,为什么,看了,因为看了思路,直觉告诉我

的,现在我就告诉你是两层的。不要问我为什么?外层循环获得一个新的数,现在我的目的是将这个

新数放到数组中的正确地方去。你懂得。你要选择正确的地方,

内层循环就是控制这个选择的。如何选择,没获得一个新的数,你必须要将它们依次和这个数之前的

数进行比较,如果满足条件,什么条件,这个需要看你的了,因为条件有升序和降序之分的。好了,

满足了条件,就进行调换,数组中两个元素的对换那个是不是有点太简单了,我都不好意思提了。好

了。亲手实现吧。代码贴上:

#include <iostream>
#include <stdlib.h>

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]<<",";
}
}


这是我写的代码,如果大家觉得我写的不对,希望大家给我提出,和我一起分享。谢谢!我的宗旨

是,你我共同学习!

现在回过头来看看,直接选择排序和直接插入排序有什么不同吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: