读书人

抉择排序是稳定排序吗

发布时间: 2012-09-28 00:03:35 作者: rapoo

选择排序是稳定排序吗?
我个人觉得选择排序是稳定的,但很多书上说他是不稳定的,不知是实现方式的不同还是我理解错了,
所以请教一下大家。

这是我的实现:

C/C++ code
//arr是等待排序的数组, size个数组元素的个数void SelectionSort(int *arr, int size){    int i, j, min;    //找出从a[i]到a[size-1]的最小元素的位置    for(i=0;i<size-1;i++)    {        min = i;        for(j=i+1;j<size;j++)            if(arr[j] < arr[min])                min = j;        //将a[i]与a[min]的数据交换        Swap(arr[i], arr[min]);    }}


[解决办法]
是吧!相同元素的相对位置没有变化!
[解决办法]
一般只有相邻元素交换的才是稳定的,像冒泡排序啊这些就是稳定的了.
[解决办法]
不稳定的,可以看下数据结构
[解决办法]
是稳定的
[解决办法]
UP.
[解决办法]
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

读书人网 >C++

热点推荐