选择排序是稳定排序吗?
我个人觉得选择排序是稳定的,但很多书上说他是不稳定的,不知是实现方式的不同还是我理解错了,
所以请教一下大家。
这是我的实现:
- 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的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。