C++ 排序

来源:互联网 发布:医生用mac 编辑:程序博客网 时间:2024/06/06 01:35

冒泡法:

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

0 0