周立功:选择排序不妨这样试一下
Posted ZLG致远电子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了周立功:选择排序不妨这样试一下相关的知识,希望对你有一定的参考价值。
第一章为程序设计基础,本文为1.6.3泛型编程第三点:选择排序。
>>>> 3. 选择排序
假设要对n个整数排序,这里给出一个简单的抽象解决方案,其文本描述如下:
从未被排序的整数中找出最小的整数,将其放在已经排序的整数列表中的下一个位置。
虽然这句话足以描述如何解决这个排序问题,但还没有说明这些整数初始化时存储在哪里?如何存储?结果存储在哪里?假设将这些整数存储在一个数组中:
data[] = {56, 12, 80, 91, 20};
其中,第i个整数存储在数组的第i个位置data[i]中(0≤i≤n)。
首先,需要明确定义两个任务:
(1)如何在列表中寻找最小整数;
(2)如何将这个最小整数与data[i]进行交换。 我们不妨从i=0开始进行分析,最小整数就存储在data[i]中,当将min设置为0时,则下一个元素位置为j=i+1=1。如果data[min]>data[j],则min=j,反之data[min]与data[j]交换位置。推而广之,当将data[i]与data[i+1]、data[i+2]、......、data[n-1]一一进行比较时,如果发现更小的整数,则将其作为新的最小整数,一直比较到data[n-1]时结束。选择排序的共性如下:
1 for(int i =0; i < n-1; i++){
2 min = i;
3 for(int j = i+1; j < n; j++)
4 if(data[min] > data[j])
5 min = j;
6 swap(&data[min], &data[j]);
7 }
选择排序中可变的是存储在数组中的待比较的整数,将以形参应对,其函数原型如下:
void selectionSort(int data[], size_t size);
// 前置条件:data是一个至少有sizie个元素的数组
// 后置条件:数组元素重新排序,使得data[0]≥data[1]≥...≥data[size-1]
void selectionSort(int *data, size_t size);
虽然选择上述两种声明中的任何一种方式都可以实现选择排序,但都是针对数组的排序,无法满足一般的要求。基于此,可以进一步泛化使之应用应更广泛。其函数原型如下:
void selectionSort(int *begin, int *end);
其调用形式如下:
selectionSort(data, data+sizeof(data)/sizeof(data[0]));
显然,无论是选择排序、冒泡排序、插入排序和快速排序等,其共性都是“排序”,因此可以统一各种排序算法的接口,便于根据具体情况重用,而又无需修改应用程序。
以上是关于周立功:选择排序不妨这样试一下的主要内容,如果未能解决你的问题,请参考以下文章
USBCAN-II由USB口连后电脑,用周立功测试软件CANtest.exe,一直是“打开设备失败”,这是怎么了?