-
概念:
选择排序是一种简单直观的排序算法,它的工作原理是:第一次从待排序的列表中选择一个最小(最大)的元素,放在列表的起始位置,然后再从剩下的未排序的元素中寻找最小(最大)元素,放到已排序序列的末尾。以此类推,直到待排序的元素为零。选择排序是不稳定的排序方法。
关于稳定性,因为选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
-
步骤:
- 先从待排序的列表中找到最小(最大)元素。怎么找?循环呗,把整一个列表循环一遍,找出最小(最大元素)。
- 把最小(最大)元素与第一个元素交换位置。也就是再循环一遍里列表,找到最小(最大)元素的位置,把该位置的数据与起始位置交换,以此类推,再从剩下的待排序的列表中找到最小(最大)元素,把该数据的位置与第二位交换,直到排序完成。
-
代码实现:
void swap(int *a,int *b) //交换两数位置 { int temp = *a; *a = *b; *b = temp; } void selection_sort(int arr[], int len) { int i,j; for (i = 0 ; i < len ‐ 1 ; i++) { int min = i; for (j = i + 1; j < len; j++) //遍历未排序的元素 { if (arr[j] < arr[min]) //找到目前最小值 { min = j; //记录最小值 } } swap(&arr[min], &arr[i]); //交换位置 } }
新手笔记之选择排序
最新推荐文章于 2024-08-03 21:14:32 发布