冒泡法:
const int LEN = 10;
int ARRAY[10] = { 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 }; //待排序数组
int temp;
bool isChange; //设定交换标志
for(int i = 0; i < LEN; i++ )
{
//最多做LEN-1趟排序
isChange = 0; //本趟排序开始前,交换标志应为假
for(int j = LEN-1; j > i; j-- ) //对当前无序区ARRAY[i..LEN]自下向上扫描
{
if( ARRAY[j] < ARRAY[j-1] )
{
temp = ARRAY[j];
ARRAY[j] = ARRAY[j-1];
ARRAY[j-1] =temp;
isChange = 1; //发生了交换,故将交换标志置为真
}
}
//printf( "\n" );
//for(int a = 0; a < LEN; a++) //打印本次排序后数组内容
//printf( "%d ", ARRAY[a] );
if( !isChange ) //本趟排序未发生交换,提前终止算法
break;
}
选择排序算法就是每一趟从待排序的记录中选出关键字最小(最大)的记录,顺序放在已排好序的子文件的最后(最前),直到全部记录排序完毕。常见的选择排序有直接选择排序(Selection Sort),堆排序(Heap Sort),平滑排序(Smooth Sort),笛卡尔树排序(Cartesian Sort),锦标赛排序(Tournament Sort),循环排序(Cycle)。
直接先把排序法:
void SelectSort(int *a, int len)
{
for (int i=0; i<len-1; i++)
{
int index = i;
for (int j=i+1; j<len; j++)
{
if (a[j]<a[index])
index = j;
}
if (index != i)
swap(a[i], a[index]);
}
}
参考:http://blog.csdn.net/left_la/article/details/8648582