1 /**********************************************************************************************************
2 * Function : test
3 * Create Date : 2014/03/23
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 任何单位和个人不经本人允许不得用于商业用途
8 转载请注明 转自 http://blog.csdn.net/beijiwei
9 * Version : V0.1
10 * date : 2014/03/23
11 * history : V0.1
12 ***********************************************************************************************************
13
14 算法基础之排序(2)--选择排序 改进
15
16 基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换.
17 升序和降序是同样道理.
18
19 假如待排序的一组数存于array[N],则需要对数组进行N-1次扫描
20
21 第1次扫描: 目标array[0] , 分别和array[1],array[2]...array[N-1] 进行对比,若比array[0]小,则交换.之后array[0]为最小值
22 第2次扫描: 目标array[1] , 分别和array[2],array[3]...array[N-1] 进行对比,若比array[1]小,则交换.之后array[0]为次小值
23 .
24 .
25 .
26 第N-1次扫描: 目标array[N-2] , 和array[N-1] 进行对比,若比array[N-1]小,则交换.之后array[N-1]为最大值.
27 结束.
28
29
30 缺点: 这种方法如果两个数不等,则每次都要交换.
31
32 改进: 在一次扫描时,只记录下标,等该次扫描结束,有改变再交换大小.
33
34 **********************************************************************************************************/
35 #include<stdio.h>
36
37
38 int main()
39 {
40 int i=0,j=0,tmp=0,k=0,array[10]={2,5,6,8,4,3,1,7,9,0};
41
42 printf("Before sort, The element of array is: \n");
43
44 for(i=0;i<10;i++)
45 printf("%d \t",array[i]);
46
47 /*********************************************************************************************************/
48 for(i=0;i<9;i++)
49 {
50 tmp=array[i];
51 k=0;
52 for(j=i+1;j<9;j++)
53 {
54 if(tmp>array[j])
55 {
56 tmp=array[j];
57 k=j;
58 }
59 }
60 if(k!=0)
61 {
62 tmp=array[i];
63 array[i]=array[k];
64 array[k]=tmp;
65 }
66 }
67
68 /*********************************************************************************************************/
69 printf("\n After sort, The element of array is: \n");
70 for(i=0;i<10;i++)
71 printf("%d \t",array[i]);
72
73 printf("\n");
74
75 return 0;
76 }
算法基础之排序(2)--选择排序 改进,码迷,mamicode.com
时间: 2024-12-20 21:37:30