基础排序算法 – 选择排序Selection sort
来源:互联网 发布:微屏软件科技 陈路 编辑:程序博客网 时间:2024/05/21 14:02
直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,
顺序放入新数组,直到全部拿完
再简单点,对着一群数组说,你们谁最小出列,站到最后边
然后继续对剩余的无序数组说,你们谁最小出列,站到最后边
再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大
举例
先说看每步的状态变化,后边介绍细节。
现有无序数组[6 2 4 1 5 9]
第一趟找到最小数1,放到最前边(与首位数字交换)
交换前:| 6 | 2 | 4 | 1 | 5 | 9 |
交换后:| 1 | 2 | 4 | 6 | 5 | 9 |
第二趟找到余下数字[2 4 6 5 9]里的最小数2,与当前数组的首位数字进行交换,实际没有交换,本来就在首位
交换前:| 1 | 2 | 4 | 6 | 5 | 9 |
交换后:| 1 | 2 | 4 | 6 | 5 | 9 |
第三趟继续找到剩余[4 6 5 9]数字里的最小数4,实际没有交换,4待首位置无须交换
第四趟从剩余的[6 5 9]里找到最小数5,与首位数字6交换位置
交换前:| 1 | 2 | 4 | 6 | 5 | 9 |
交换后:| 1 | 2 | 4 | 5 | 6 | 9 |
第五趟从剩余的[6 9]里找到最小数6,发现它待在正确的位置,没有交换
排序完毕输出正确结果[1 2 4 5 6 9]
第一趟找到最小数1的细节
当前数组是| 6 | 2 | 4 | 1 | 5 | 9 |
先把6取出来,让它扮演最小数
当前最小数6与其它数一一进行比较,发现更小数就交换角色
当前最小数6与2比较,发现更小数,交换角色,此时最小数是2,接下来2与剩余数字比较
当前最小数2与4比较,不动
当前最小数2与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较
当前最小数1与5比较,不动
当前最小数1与9比较,不动,到达末尾
当前最小数1与当前首位数字进行位置交换,如下所示
交换前:| 6 | 2 | 4 | 1 | 5 | 9 |
交换后:| 1 | 2 | 4 | 6 | 5 | 9 |
完成一趟排序,其余步骤类似
C语言代码:
1 #include <stdio.h> 2 int main() 3 { 4 int a[5]={5,4,3,2,1},i; 5 6 printf("原本的数字为:"); 7 for(i=0;i<5;i++) 8 { 9 printf("%d ",a[i]);10 }11 printf("\n");12 13 void choose (int a[],int n);14 choose (a,5);15 16 printf("选择法排序后:");17 for(i=0;i<5;i++)18 {19 printf("%d ",a[i]);20 }21 return 0;22 }23 24 //选择法25 void choose (int a[],int n)26 {27 int i,j,k,temp;28 for(i=0;i<n-1;i++)29 {30 k=i;//给记号赋值31 for(j=i+1;j<n;j++)32 {33 if (a[k]>a[j]);34 {35 k=j;//使k总是指向最小元素36 }37 if (i!=k)//当k!=i时才交换38 {39 temp=a[i];40 a[i]=a[k];41 a[k]=temp;42 }43 }44 }45 }
引用:http://www.cnblogs.com/kkun/archive/2011/11/23/2260281.html
@chinazhoumin 提醒我说selectsort函数可以再简单一些,果然最后的那个if完全没用……
1 void selection (int a[],int n) 2 { 3 int i,j,k,temp; 4 for(i=0;i<n-1;i++) 5 { 6 k=i;//给记号赋值 7 for(j=i+1;j<n;j++) 8 { 9 if (a[k]>a[j]);10 {11 k=j;//使k总是指向最小元素12 temp=a[i];13 a[i]=a[k];14 a[k]=temp;15 }16 }17 }18 }
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 基础排序算法 – 选择排序Selection sort
- 算法--选择排序 Selection Sort
- 经典排序算法 - 选择排序Selection sort
- 经典排序算法 - 选择排序Selection sort
- 经典排序算法 - 选择排序Selection sort
- 排序算法-选择排序 Selection Sort
- 经典排序算法 - 选择排序Selection sort
- 排序算法---选择排序(Selection Sort)
- 选择排序(selection sort)
- 选择排序(Selection Sort)
- selection sort 选择排序
- 选择排序 Selection Sort
- 选择排序(Selection Sort)
- 选择排序(Selection Sort)
- 选择排序 (Selection Sort)
- 选择排序(Selection sort)
- 选择排序 (Selection sort)
- 选择排序Selection sort
- 基础排序算法 – 快速排序Quick sort
- 基础排序算法 – 插入排序Insertion sort
- 黑马程序员——包装类
- 听道笔记-06-02-2013-《信徒合一的事奉》-吕牧师
- 这就是生活,学着想开,看淡,不强求,别让自己心累
- 基础排序算法 – 选择排序Selection sort
- 黑马程序员——集合框架
- 【Android 开发】:UI控件之 ImageView 实现图片旋转和缩放功能
- linux 模块驱动开发第一弹 helloworld
- 黑马程序员——集合框架工具类
- 基础排序算法 – 冒泡排序Bubble sort
- 解决运行JScript的一个诡异错误
- 十进制数转二进制
- CSS图片垂直居中详解