选择排序,基本思想是对一个数组进行遍历,找到最大或最小的一个放到第一个位置上,第二次遍历同样找到最大或最小的放到第二个位置上。
选择排序与冒泡排序相似,不同的是冒泡排序凡是符合条件的都会交换位置即符合条件就交换,而选择排序中,如果符合条件,则标志它的位置,等到全部判断一遍后,把标志位置的元素与某一元素交换位置,简单的说就是多次比较,一次交换。
实现代码如下:
#include "stdafx.h"
#define _Count (sizeof(p)/sizeof(p[0]))
int _tmain(int argc, _TCHAR* argv[])
{
int p[] = {2,3,4, 1,77,55,99 };
for (int i = 0; i <( _Count); i++)
{
int index = i;
for (int j = i ; j < (_Count); j++)
{
if (p[index] < p[j+1])
index = j+1;
}
int tmp = p[index];
p[index] = p[i];
p[i] = tmp;
}
for (int k = 0; k < (_Count); k++)
{
printf("%d ", p[k]);
}
return 0;
}
选择排序为不稳定排序,当遇见5,5,3这样的数组时,该算法会交换两个5的前后顺序。