选择排序过程(选择排序过程示意图)

http://www.itjxue.com  2023-01-28 12:13  来源:未知  点击次数: 

选择排序法

常用的选择排序方法有两种: 直接选择排序 和 堆排序 。

直接排序简单直观,但性能略差;

堆排序是一种较为高效的选择排序方法,但实现起来略微复杂。

直接选择排序的思路很简单,它需要经过n-1趟比较。

直接选择排序的优点是算法简单,容易实现。

直接选择排序的缺点是每趟只能确定一个元素,n个数组需要进行n-1趟比较。

封装的实体类

具体的算法与测试

假设有n个数据元素的序列k0,k1,…,kn-1,当且仅当满足如下关系时,可以将这组数据称为小顶堆(小根堆)。

ki = k2i+1且ki = k2i+2(其中i=0, 2,…,(n-1)/2)

或者,满足如下关系时,可以将这组数据称为大顶堆(大根堆)。

ki = k2i+1且ki =k2i+2(其中i=0, 2,…,(n-1)/2)

对于满足小顶堆的数据序列k0,k1,…,kn-1,如果将它们顺序排成一棵完全二叉树,则此树的特点是:树中所有节点的值都小于其左右子节点的值,此树的根节点的值必然最小。反之,对于满足大顶堆的数据序列k0,k1,…,kn-1,如果将它们顺序排成一棵完全二叉树,则此树的特点是:树中所有节点的值都大于其左右子节点的值,此树的根节点的值必然最大。

通过上面介绍不难发现一点,小顶堆的仁义子树也是小顶堆,大顶堆的任意子树还是大顶堆

例:判断数据序列

9,30,49,46,58,79是否为堆,将其转换为一个完全二叉树

判断数据序列:93,82,76,63,58,67,55是否为堆,将其转换为一个完全二叉树

堆排序的关键在于建堆,它按如下步骤完成排序。

通过上面介绍不难发现,堆排序的步骤就是重复执行以下2步。

(1)建堆;

(2)拿堆的根节点和最后一个节点交换。

由此可见,对于包含n个数据元素的数据组而言,堆排序需要经过n-1次建堆,每次建堆的作用就是选出该堆的最大值或最小值。因为堆排序的本质上依然是一种选择排序。

例如如下数据组:

9,79,46,30,58,49

建堆过程

具体算法

excel多个条件选择时 如何排序?

具体实例如下:

一、使用excel的排序功能即可实现;

二、过程:选中需要排序的区域→点击上方工具栏点击 “数据”→“排序”→勾选“数据包含标题H”→主要关键字选择“生日”(注意选择升序、降序)→确认。

三、excel图解:

1、

2、

写出选择排序法的过程

template class T

class List

{ protected:

int count;

T entry[maxList];

public:

List(int size)

{ count=size; }

void input()

{ for(int i=0; icount; i++)

cinentry[i];

}

void output()

{ for(int i=0; icount; i++)

coutentry[i]" ";

}

//other function members

};

template class T

class Sortable_list: public ListT

{ public:

Sortable_list(int size):ListT(size){ }

void shell_sort();

void straight_selection_sort();

void insertion_sort();

private:

int max_key(int low, int high);

void sort_interval(int start, int increment);

};

template class T

int Sortable_listT :: max_key(int low, int high)

{ int k=low;

for(int j=low+1; j=high; j++)

if ( entry[k]entry[j] )

k=j;

return k;

}

template class T

void Sortable_listT :: straight_selection_sort()

{ T temp;

int k;

for(int i=count-1; i=1; i--)

{ k=max_key(0,i);

if ( k!=i )

{ temp=entry[i];

entry[i]=entry[k];

entry[k]=temp;

}

}

}

这里我给出了一部分程序代码,后半部分就是选择排序算法,过程就是由这个算法实现

利用选择法,描述将 N 个数按从小到大顺序排列的基本思路与算法流程。

把未排序的数放在右边,已排序的放左边,算法就是,不断地从右边选取最小者放到左边。

选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量。

接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换。

扩展资料:

选择法的稳定性

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。

那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。

比较拗口,举例如下,序列5、8、5、2、9,知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

参考资料:百度百科-选择排序法

(责任编辑:IT教学网)

更多

推荐网络媒体文章