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

/**********************************************************************************************************         
* Function        : test         
* Create Date     : 2014/03/23        
* Author          : NTSK13         
* Email           : beijiwei@qq.com         
* Copyright       : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。         
                             任何单位和个人不经本人允许不得用于商业用途         
                             转载请注明 转自 http://blog.csdn.net/beijiwei         
* Version          : V0.1           
* date             : 2014/03/23       
* history          : V0.1            
***********************************************************************************************************         
          
算法基础之排序(2)--选择排序 改进(1)

基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换.
		  升序和降序是同样道理. 

 假如待排序的一组数存于array[N],则需要对数组进行N-1次扫描
 
 第1次扫描: 目标array[0] , 分别和array[1],array[2]...array[N-1] 进行对比,若比array[0]小,则交换.之后array[0]为最小值
 第2次扫描: 目标array[1] , 分别和array[2],array[3]...array[N-1] 进行对比,若比array[1]小,则交换.之后array[0]为次小值
   .
   .
   .
 第N-1次扫描: 目标array[N-2] , 和array[N-1] 进行对比,若比array[N-1]小,则交换.之后array[N-1]为最大值.
 结束.


缺点:     这种方法如果两个数不等,则每次都要交换.
		   
改进:     在一次扫描时,只记录下标,等该次扫描结束,有改变再交换大小.

**********************************************************************************************************/                  
#include<stdio.h>                 
                                
      
int main()                
{                
    int i=0,j=0,tmp=0,k=0,array[10]={2,5,6,8,4,3,1,7,9,0};  
    
	printf("Before sort, The element of array is: \n");  

	for(i=0;i<10;i++)
	{
		printf("%d \t",array[i]);  	
	}
/*********************************************************************************************************/
	for(i=0;i<9;i++)
	{   
		tmp=array[i];
		k=0;
		for(j=i+1;j<9;j++)
		{
			if(tmp>array[j])
			{
				tmp=array[j];
				k=j;
			}
		}
		if(k!=0)
		{
			tmp=array[i];
			array[i]=array[k];
			array[k]=tmp;
		}
	}

/*********************************************************************************************************/
	printf("\n After sort, The element of array is: \n");  
	for(i=0;i<10;i++)
	{
		printf("%d \t",array[i]);  	
	}
  
	printf("\n");  	

    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值