选择排序


// 通过指针交换两个元素的值
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
/****************************************************************
 * name;SeletSort
 * function:sort
 * parameter;
 *              @int arr[]
 *              @int arrsize
 *
 * ReValue;none
 * author;小北blog
 * attention;none
 * date;2024.06.01
 * history;
 * version;
 * Copyright(c) 2024 huahuadebaby99@163.com All rights reserved
 *****************************************************************/
void SeletSort(int arr[], int arrsize)
{
    // 定义需要的变量,数组最小值下标min,和当前需要选择比较的变量的下标j
    int i, j, min;
    for (i = 0; i < arrsize - 1; i++) // 把第一个元素当有序序列
    {
        min = i;                          // 用下标的方式把第一个数当最小
        for (j = i + 1; j < arrsize; j++) // 从后面的数开始比较
        {
            if (arr[j] < arr[min]) // 判断
            {
                min = j; // 更新最小值下标
            }
        }
        if (min != i) // 最小
        {
            swap(&arr[min], &arr[i]); // 找到最小交换
        }
    }
}
// 打印数组
void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
// 主函数
int main()
{
    int arr[] = {66, 77, 44, 11, 99, 55};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("原来的数组: \n");
    printArray(arr, n);
    SeletSort(arr, n);
    printf("排序后的数组: \n");
    printArray(arr, n);
    return 0;
}

验证结果:

总结: 选择排序的中心思想就是找到最小值。
把数组看成两个不同的数组,前面部分的当成有序的数组,后面部分的当成无序数组,过程是在该数组上进行操作的
,重点是把最左边的数字当成是有序数组a,后面的当成无序,在无序里面找最小放在有序的右边,就如基因编码一样,然后循环偏移下标找到每组最小的值。

posted @ 2024-06-01 11:17  小北bolg  阅读(23)  评论(0)    收藏  举报