SelectSort

算法描述:

在待排序列中找到最小(大)元素,存放到待排序列的起始位置

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

冒泡排序是和相邻元素两两相比,选择排序是与所有未排序的元素相比。

选择排序的进阶版就是:堆排序


代码实现:

第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;

第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;

以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

def select_sort(lst):
    for i in range(len(lst)):
        min = i
        for j in range(i+1,len(lst)):
            if lst[j] < lst[min]:
                min = j
        lst[min],lst[i] = lst[i],lst[min]
    return lst

if __name__ == "__main__":
    data = [50, 10, 90, 30, 70, 40, 80, 60, 20]
    print(data)
    select_sort(data)
    print(data)

算法性能:

时间复杂度:O(n**2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:C语言中的Select Sort数组代码的实现方法如下: 1. 从数组中选取一个基准元素pivot; 2. 从头至尾遍历数组,将小于pivot的元素移动到pivot的左边,将大于pivot的元素移动到pivot的右边; 3. 递归处理pivot的左右两边的数组,直到数组有序。 ### 回答2: C语言中,选择排序算法(Select Sort)可以用以下代码实现: ```c #include <stdio.h> void selectSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int minIndex = i; // 记录每轮的最小值索引 // 在未排序序列中找到最小值的索引 for (int j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // 将最小值与当前位置交换 int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); printf("排序前的数组:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } selectSort(arr, n); printf("\n排序后的数组:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` 选择排序是一种简单直观的排序算法,其基本思想是每次从未排序的数组中选择最小的元素放到已排序的数组末尾。在实现时,使用两层循环,外层循环控制比较的轮数,内层循环在未排序的数组中找到最小值的索引,然后将最小值与当前位置进行交换。通过多次轮询,将最小值逐渐排序到数组的左侧,直到整个数组有序。 以上代码中,使用`selectSort`函数对数组进行选择排序,并在`main`函数中测试该函数的运行结果。输出结果中首先打印原始数组,然后使用选择排序对数组进行排序,并打印排序后的结果。运行代码,可以看到输出结果为: 排序前的数组:64 25 12 22 11 排序后的数组:11 12 22 25 64 ### 回答3: C语言中的选择排序算法可以用如下代码来实现: ```c #include <stdio.h> void selectionSort(int arr[], int n) { int i, j, minIdx, temp; // 遍历数组n-1次 for (i = 0; i < n - 1; i++) { // 假设当前i为最小元素的索引 minIdx = i; // 在未排序部分中查找最小元素的索引 for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIdx]) { minIdx = j; } } // 将最小元素与未排序部分的第一个元素交换位置 temp = arr[minIdx]; arr[minIdx] = arr[i]; arr[i] = temp; } } int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); printf("排序后的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } ``` 选择排序的基本思路是:每一次遍历找出未排序部分的最小元素,然后与未排序部分的第一个元素交换位置。经过n-1次遍历后,数组就被完全排序。在上述代码中,`selectionSort`函数用于实现选择排序算法,`main`函数中创建了一个整数数组,并调用`selectionSort`函数对数组进行排序,并将结果输出。输出结果为按升序排列的数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值