您的位置:首页 > 其它

简单选择排序

2016-03-30 09:44 204 查看
简单选择排序的基本思想:

第1趟,在待排序记录r[1]~r
中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2]~r
中选出最小的记录,将它与r[2]交换;
第i趟在待排序记录r[i]~r
中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
初始序列:{ 49 27 65 97 76 12 38}
第1趟:12与49交换:12
{
27 65 97 76 49 38 }
第2趟:27不动 :12 27
{
65 97 76 49 38 }
第3趟:65与38交换:12 27 38{ 97 76 65 49}
第4趟:97与49交换:12 27 38 49{ 97 76 65
}
第5趟:76与65交换:12 27 38 49 65{ 97 76
}
第6趟:97与76交换:12 27 38 49 65 76 97

代码:
#include<iostream>
using namespace std;

//升序
void SelectSortUpNumOne(int array[], size_t size)  //参数一接受数组,参数二接受数组元素个数
{
for (int i = 0; i < size-1; ++i)
{
int index = i;                      //假设数组第一个数就是最小的;无序序列的第一个
for (int j = index+1; j < size; ++j)
{
if (array[j] < array[index])    //每一趟中,把无序序列中最小的和第一个数交换;
{
swap(array[index],array[j]);//缺点是 交换的次数太多
}
}
}

}

//升序
void SelectSortUpNumTwo(int array[], size_t size)  //参数一接受数组,参数二接受数组元素个数
{
for (int i = 0; i < size - 1; ++i)
{
int index = i;                      //假设数组第一个数就是最小的;
for (int j = index + 1; j < size; ++j)
{
if (array[j] < array[index])    //每一趟中,把最小数下标的给第一个数下标;
{
index = j;                  //index始终都是最小下标
}
}
if (index != i)                     //每趟只用交换一次
{
int tmp = array[index];
array[index] = array[i];
array[i] = tmp;
}
}

}
int main()
{
<span style="white-space:pre">	</span>int a[10] = {9,2,5,8,4,1,6,7,3,0};
SelectSortUpNumOne(a, 10);
SelectSortUpNumTwo(a, 10);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: