选择排序----详细算法分析

选择排序思路:找到乱序数组中最大元素的位置,再与乱序数组中最后一个元素位置交换,即算完成一次选择排序,再从剩下的数中找最大与剩下乱序数组中最后一个元素位置交换以此循环到排序结束

 

#include<stdio.h>

#define N 6

//findMaxPos找数组中最大元素位置的函数

int findMaxPos(int arr[], int n)

{

    int max = arr[0];//假设最大数为arr[0]

    int pos = 0;//pos表示为,=0表示为假设最大值数的位置

    int i;

    for (i = 1; i < n; i++)

    {

         if (arr[i] > max)

         {

             max = arr[i];//实现max与数组中的每个元素比较

             pos = i;//i即可以表示循环次数也可以表示数组元素位置

         }

    }

    return pos;

}

//selectionSort实现选择排序即位置交换

void selectionSort(int arr[], int n)

{

    while (n > 1)

    {

         int pos = findMaxPos(arr, n);//得到最大值的位置

         int temp = arr[pos];

         arr[pos] = arr[n - 1];//最大一个元素与最后一个元素交换位置

         arr[n - 1] = temp;

         n--;

         //n--目的是缩小范围让剩下的元素进行交换位置

         //当n不能在缩减时不再交换,即完成排序

    }

}

int main()

{

    int i, arr[N];

    printf("请输入一组乱序的%d个数:\n", N);

    for (i = 0; i < N; i++)

    {

         scanf_s("%d", &arr[i]);

    }

    selectionSort(arr, N);

    printf("排序后的数为:");

    for (i = 0; i < N; i++)

    {

         printf("%d ", arr[i]);

    }

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值