c 选择排序

递归:

#include <stdio.h>

void printArray(int *array, int num);
void selectionSort(int *array,int order,int num);

void selectionSort(int *array,int order,int num)
{
    // num -> 元素个数
    // order -> 标准左值的下标 --> (num - order) -> 标准右值的下标
    
    // 递归结束条件
    if (order == (num / 2))
    {
        return;
    }
    

    int min = order;// 最小值的下标
    int max = (num - 1) - order;// 最大值的下标

    /* 寻找最值 */
    for (int i = (order + 1); i < (num - order); i++)
    {
        min = (array[min] < array[i] ? min : i);
        max = (array[max] > array[i] ? max : i);
    }


    /* 标准左值与最小值互换 */
    if (array[min] < array[order]) 
    // 如果最小值比标准左值小,无操作
    {
        int temp = array[min];
        array[min] = array[order];
        array[order] = temp;
    }

    /* 标准右值与最大值互换 */
    if (array[max] > array[(num - 1) - order]) 
    // 如果最大值比标准右值大,无操作
    {
        int temp = array[max];
        array[max] = array[(num - 1) - order];
        array[(num - 1) - order] = temp;
    }

    selectionSort(array,++order,num);
}

void printArray(int *array, int num)
{
    for (int i = 0; i < num; i++)
    {
        printf("%2d ",*(array + i));
    }
    putchar('\n');
    return;
}

int main(void)
{
    int array[] = {9,10,3,4,2,5,1,7,8,6};
    int num = sizeof(array) / sizeof(int);
    printArray(array,num);
    selectionSort(array,0,num);
    printArray(array,num);
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务