排序算法:每一轮从待排序的数据中选出最小或最大的一个元素,把选出的这个数据放在已经排好的数的后面,知道全部待排列的数据元素排完。
这里从小到大排序
n个数字,选出9个最小的数,会剩下一个最后的最大那个数,那个数即使不用管它也自然而然地排好了,所以,n个数字只需要进行n-1轮操作
第i轮操作(i>=0),将arr[i]分别于第i个数据之后的元素比较,如果发现比arr[i]小的元素,就让二者交换位置
#include<iostream>
using namespace std;
#define N 10
int main()
{
int arr[N] = { 1,4,6,3,0,2,5,9,8,7 };
int n = sizeof(arr) / sizeof(int);
for (int i = 0; i < n - 1; i++) {
for (int j = i+1; j < n; j++) {
if (arr[i] > arr[j]) {
swap(arr[i], arr[j]);
}
}
}
for (int i = 0; i < N; i++)
{
cout << arr[i] << ",";
}
cout << endl;
return 0;
}
下面是每行代码的详细解释:
选择排序的基本思想是:在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。这样依次类推,直到所有元素均排序完毕。
下面是这段代码的解释:
#include<iostream>
:引入C++标准库中的输入输出流。
using namespace std;
:使用C++标准命名空间。
#define N 10
:定义一个预处理指令,将N替换为10。
int main()
:程序的主入口点。
{
:开始主函数。
int arr[N] = { 1,4,6,3,0,2,5,9,8,7 };
:定义一个整型数组arr
,并用10个整数初始化它。
int n = sizeof(arr) / sizeof(int);
:计算数组的长度。sizeof(arr)
得到整个数组的大小(以字节为单位),sizeof(int)
得到一个整数的大小(以字节为单位)。两者相除即得到数组的长度。
for (int i = 0; i < n - 1; i++) {
:外层循环,用于遍历数组中的每一个元素(除了最后一个)。
int minIndex = i;
:初始化最小元素的索引为当前外层循环的索引i
。
for (int j = i+1; j < n; j++) {
:内层循环,从当前外层循环的索引i
的下一个元素开始,遍历到数组的最后一个元素。
if (arr[j] < arr[minIndex]) {
:如果当前元素arr[j]
小于之前找到的最小元素arr[minIndex]
,则更新最小元素的索引。
minIndex = j;
:将最小元素的索引更新为当前索引j
。
}
:结束内层循环。
swap(arr[i], arr[minIndex]);
:将最小元素与第i
个元素交换位置。
}
:结束外层循环。
for (int i = 0; i < N; i++)
:遍历并输出排序后的数组。
{
:开始循环体。
cout << arr[i] << ",";
:输出当前元素并在其后添加一个逗号。
}
:结束循环体。
cout << endl;
:输出一个换行符,使结果更易读。
return 0;
:返回0表示程序正常退出。
}
:结束主函数。这段代码通过选择排序算法将数组从小到大排序,并输出排序后的结果。