首页 > 代码库 > 算法基础之排序(2)--选择排序 改进

算法基础之排序(2)--选择排序 改进

 1    /**********************************************************************************************************          
 2     * Function        : test          
 3     * Create Date     : 2014/03/23         
 4     * Author          : NTSK13          
 5     * Email           : beijiwei@qq.com          
 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     }