数据结构 - 选择排序
2013-06-13 17:05
225 查看
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。O(n*n)
//递归写法
笔试碰到,时间不够,写了个非递归的,面试时,非让写个递归的出来,结果一紧张,没弄出来。。。
好好反省一下:。。。。。。。
sort(int a[], int n),函数已给定,先说了一个递归的,不过加了一个参数,面试官说不行。囧。。。
想了半天,居然昏了头了。。。。。。
思想:由于函数给定,递归只能改变n,所以得从后往前,先确定最大的一个数。然后在来确定倒数第二个大的数,知道最后。
结束条件是只剩下一个数,排序结束。
//难吗?看来心理素质还不行!!!一紧张就全乱套了。。。
反省。期待二面通知。。。
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。O(n*n)
#include <stdio.h> void SelectSort(int a[], int n) { int i, j, min; //i从0到n-2(倒数第二个数) for (i = 0; i < n - 1; i++) { //默认第一个为最小值 min = i; for (j = i + 1; j < n; j++) { //找到最小值,标记为min(结果为递增排序) //若要递减排序,可改为: a[min] < a[j] if (a[min] > a[j]) min = j; } //如果最小值即为当前第一个数,则无须交换;否则交换 if (min != i) { int t = a[i]; a[i] = a[min]; a[min] = t; } } } int main() { //int a[] = {31, 41, 59, 26, 53, 58, 97}; int a[] = {7, 1, 0, 0, 3, 0, 6, 6, 3}; SelectSort(a, sizeof(a) / sizeof(*a)); for (int i = 0; i < sizeof(a) / sizeof(*a); i++) printf("%d\t", a[i]); printf("\n"); return 0; }
//递归写法
笔试碰到,时间不够,写了个非递归的,面试时,非让写个递归的出来,结果一紧张,没弄出来。。。
好好反省一下:。。。。。。。
sort(int a[], int n),函数已给定,先说了一个递归的,不过加了一个参数,面试官说不行。囧。。。
想了半天,居然昏了头了。。。。。。
思想:由于函数给定,递归只能改变n,所以得从后往前,先确定最大的一个数。然后在来确定倒数第二个大的数,知道最后。
结束条件是只剩下一个数,排序结束。
#include<iostream> using namespace std; void RSort(int A[], int n) { if(n==1)//结束条件 return; for(int i = 0; i < n; i++) {//找最大的数,放到最后 if(A[i]>A[n-1]) { int t = A[i]; A[i] = A[n-1]; A[n-1] = t; } } RSort(A,n-1);//递归调用, } int main() { int a[] = {4,5,7,2,8,1}; RSort(a, 6); for (int i = 0; i < 6; i++) cout << a[i] << ' '; cout << endl; return 0; }
//难吗?看来心理素质还不行!!!一紧张就全乱套了。。。
反省。期待二面通知。。。
相关文章推荐
- 【数据结构】 单链表的基本操作+反转+选择/直接插入/冒泡3种排序
- [数据结构和算法]选择排序
- 【数据结构】选择排序
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 【数据结构】中的选择(SelectSort)排序
- 数据结构-排序: 选择排序(直接选择排序法)
- 2015年大二上-数据结构-内部排序-(5)-直接选择排序
- 【python】python数据结构(五)——排序:直接选择排序
- 数据结构JAVA---选择排序
- 数据结构-选择排序以及对它的优化
- 数据结构-选择排序
- 数据结构(1)-选择排序和插入排序
- C语言-数据结构-选择排序-源代码
- 数据结构-排序: 选择排序(堆选择排序法)
- [数据结构]第五章-排序与选择
- 数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)
- 初学数据结构---简单选择排序
- 第16周SHH数据结构-【项目1-验证算法(5)直接选择排序 】
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 【数据结构】算法10.9 选择排序-简单选择排序