选择排序 原创 排序算法 2021年7月16日 07:14 夏至未至 1350 当前内容 1445 字,在路上,马上到,马上到 简单选择排序的基本思想: 第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换; 第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换; 第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与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 ```cpp #include 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() { SelectSortUpNumOne(a, 10); SelectSortUpNumTwo(a, 10); } ``` 本文标题: 选择排序 本文作者: 夏至未至 发布时间: 2021年7月16日 07:14 最近更新: 2021年7月28日 07:02 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 选择排序(1) 上一个 基数排序 下一个 计数排序 当前文章评论暂未开放,请移步至留言处留言。