排序——选择排序法

选择排序法

选择排序法也算是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入到另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从大到小排序,则将最大值放入第一个位置;若从小到大排序,则将最大值放入最后一个位置。例如,一开始在所有数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第二个位置,以此重复,直到完成排序为止。

演示

原始值:55,23,87,62,16
第一次扫描:先找到该数列中最小值,然后与数列中第一个元素交换
16,23,87,62,55
第二次扫描:从第二项开始查找,除第一项外找到此数列中的最小值,再与第二项元素交换位置
16,23,87,62,55
第三次扫描:从第三项开始查找
16,23,55,62,87
第四次扫描:从第四项开始查找
16,23,55,62,87

程序范例

#include<stdio.h>
#include<stdlib.h>

void select(int *);
void showdata(int *);

int main()
{
    int data[8] = {55,23,87,62,16,34,65,25}
    printf("before sort: ");
    showdata(data);
    printf("************************************");
    select(data);
    printf("after sort: ");
    showdata(data);

    return 0;
}

void showdata(int *)
{
    int i;
    for (i=0;i<8;i++)
        printf("%3d",data[i]);
    printf("\n");
}

void select(int *)
{
    int i, j, tmp;
    for(i=0;i<7;i++)
    {
        for(j=1;j<8;j++)
        {
            if(data[i]>data[j])
            {
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
        showdata(data);
    }
    printf("\n");
}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 题目中的 b'6-2' 应该是一个编码错误,应该是 6-2 。使用函数的选择排序,代码如下: def selection_sort(nums): for i in range(len(nums)): min_index = i for j in range(i+1, len(nums)): if nums[j] < nums[min_index]: min_index = j nums[i], nums[min_index] = nums[min_index], nums[i] return nums nums = [6,4,5,8,1,2,7,3] print(selection_sort(nums)) # [1, 2, 3, 4, 5, 6, 7, 8] ### 回答2: 选择排序是一种简单的排序,其思想是每次从未排序的元素中选取最小(或最大)的元素放到已排序的末尾。在实现选择排序时,可以利用函数进行封装,以便于代码的复用。 函数的选择排序的实现思路如下: 1. 定义一个选择元素的函数selectMinIndex,该函数接收一个数组作为参数,返回该数组中最小元素的下标。 2. 定义一个交换元素的函数swap,该函数接收两个参数——数组和要交换的元素下标,用于实现元素的位置交换。 3. 主函数中利用循环依次选择数组中的元素,并将其与未排序的第一个元素进行交换。交换后,将未排序区域缩小一个元素。循环直至所有元素都已排序。 下面是函数的选择排序的示例代码: ``` #include <stdio.h> // 选择最小元素的下标 int selectMinIndex(int arr[], int start, int end) { int minIndex = start; // 最小元素下标初始值为start for (int i = start + 1; i <= end; i++) { if (arr[i] < arr[minIndex]) { // 与当前最小元素比较 minIndex = i; // 更新最小元素下标 } } return minIndex; } // 交换元素 void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 函数的选择排序 void selectionSort(int arr[], int n) { for (int i = 0; i < n; i++) { int minIndex = selectMinIndex(arr, i, n - 1); // 选择排序区域的最小元素下标 swap(arr, i, minIndex); // 交换元素位置 } } int main() { int arr[] = {4, 2, 6, 3, 9, 5}; int n = sizeof(arr) / sizeof(int); selectionSort(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` 通过函数的封装,代码结构更加清晰简洁,利于维护和扩展。同时,函数的选择排序具有良好的可读性和可理解性,适用于小规模数据集的排序任务。 ### 回答3: 选择排序是一种简单直观的排序,它的基本思想是每次选择一个最小(或最大)的元素放在最前面(或最后面),然后继续选择剩余元素中的最小(或最大)元素,以此类推,直到所有元素都排好序。使用函数的选择排序的实现可以分成两个部分,分别是选出最小元素和排序。 选出最小元素的函数 选出最小元素的函数需要输入一个数组及其长度,输出最小元素的下标。具体实现思路如下: 1.定义一个变量mi,用于记录当前最小元素的下标,初始值设为第一个元素的下标。 2.从第二个元素开始遍历数组,如果当前元素比mi所指的元素小,就将mi更新为当前元素的下标。这样一直遍历到数组最后一个元素,mi所指的元素就是最小元素。 3.返回mi作为结果。 排序函数 排序函数需要输入一个数组及其长度,输出排序后的数组。具体实现思路如下: 1.从头到尾遍历整个数组,对于每个位置i,先调用选出最小元素的函数得到从i到末尾中最小元素的下标minIndex。 2.然后将i与minIndex所指的元素交换位置,即可将minIndex所指的元素放到i的位置。这样,经过第i轮遍历后,前i个元素已经有序。 3.重复执行第1步和第2步,直到整个数组都有序。 使用函数的选择排序的时间复杂度为O(n^2),其中n为数组的长度。虽然选择排序比较简单,但它的效率比较低,一般情况下不适用于大规模数据的排序。在实际应用中,常用的排序包括归并排序、快速排序等,它们的时间复杂度相对较低,适用于大规模数据的排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值