选择排序过程(选择排序过程示意图)
选择排序法
常用的选择排序方法有两种: 直接选择排序 和 堆排序 。
直接排序简单直观,但性能略差;
堆排序是一种较为高效的选择排序方法,但实现起来略微复杂。
直接选择排序的思路很简单,它需要经过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的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
参考资料:百度百科-选择排序法