选择排序

最简单最垃圾的排序算法

在写的时候

  • 由简单到复杂
    • 验证一步走一步
    • 多打印中间结果
  • 先局部后整体
    • 没思路先细分
  • 先粗糙后精细
    • 变量更名
    • 语句合并
    • 边界处理

思路:

经过一次一次的遍历总体找到最小的数放在最前面,已经放好的不在改变。

首先假设第一个是最小的,然后将这个数和后面的每一个数进行对比,如果找到了更小的数就把该数和假设的数进行交换。

数组arr 是通过下标进行操作的,所以我们需要有一个int型的变量来存放这个下标

也就是下面使用到的Min_Pro

在进行交换的时候,同时需要一个临时的变量来存放之前的数来进行交换,也就是下面使用到的temp变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int main() {
char arr[] = {1,4,7,2,5,8,3,6,9};//对这个数组进行排序
//printf("%d",sizeof(arr));
for (int i = 0; i < sizeof(arr); i++)
{
int Min_Pro = i;//用来表示循环的时候的最小值的位置

for (int j = i + 1; j < sizeof(arr); j++)
{ //这个for是用来循环判断是否比后面那个小,如果小的话就把Min_Pro的值改成对应的地方的值
if (arr[j] < arr[Min_Pro])
{
Min_Pro = j;
}
}
int temp = arr[i];
arr[i] = arr[Min_Pro];
arr[Min_Pro] = temp;
printf("%d", arr[i]);
}
}

选择排序不稳定