1 从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后。
2 要点:选择排序选最小的放在左边
-- 第一层循环定义扫描的次数 有n个数扫描n遍
-- 第i遍扫描,就从元素arr[i - 1]开始进行两两比较,将最小元素的下标赋值给temp中间变量
-- 第i遍扫描出最小的元素与arr[i - 1]元素进行互换
3 想象:一条毛巾
4 冒泡排序 与 选择排序
-- 冒泡排序选最大的放在右边,选择排序选最小的放在左边
-- 选择排序扫描一遍选出最小的,放在左边(已排序数值的右边),一遍扫描只进行一次交换,速度比冒泡排序快。
5 见案例(xuanzepaixu1.cpp)
//
// Created by z on 20-2-10.
//
#include <iostream>
using namespace std;
// 函数声明 arg1:需要排序的数组 arg2:需要排序数组的长度
void SelectSort(int* arr, const int n);
// 获取数组元素个数的函数模板
template <class T>
int length(T& arr)
{
return sizeof(arr) / sizeof(arr[0]);
}
int main()
{
int x[] = {1, 3, 5, 7, 9, 0, 2, 4, 6, 8};
// 调用函数
SelectSort(x, length(x));
// 输出排序后的结果
for(int k = 0; k < length(x); k++)
{
cout << x[k] << ",";
}
return 0;
}
// 函数定义
void SelectSort(int* arr, const int n)
{
for(int i = 0; i < n; i++) // 第一层循环定义扫描的次数 有n个数扫描n遍
{
int temp = i; // 第i遍扫描,就从元素arr[i - 1]开始进行两两比较,将最小元素的下标赋值给temp
for(int j = i + 1; j < n; j++) // 找出循环中最小元素的下标,赋值给temp
{
if(arr[j] < arr[temp])
{
temp = j;
}
}
swap(arr[i], arr[temp]); //第i遍扫描出最小的元素 与arr[i - 1]元素进行互换
}
}
v