注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲插入排序 -- C语言实现  

2012-08-08 13:02:39|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

 

#include <stdio.h>
#include <stdlib.h>
void insert_sort( int *a, int n );
void insert_sort( int *a, int n )
{
    int i, j, x;
    for ( i = 1;i < n;i++ )
    {
        x = a[i];  //从第二个数组元素开始,依次作为新元素
        j = i - 1;  //  插入排序使用这样的一个事实:位置0到位置i-1上的元素是排好顺序的
        while ( j >= 0 && a[j] > x ) //从新元素的上一个元素开始查找合适的位置,一直查找到首元素
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = x; // 将新元素放到这里
    }
}

int main()
{
    int i;
    int len;
    int array[] = {12, 278, 85, 24, 18, 69, 58, 21, 175, 28, 1};
    len = sizeof( array ) / sizeof( *array );
    printf( "排序前数组序列:\n" );
    for ( i = 0;i < len;i++ )
    {
        printf( "%5d", array[i] );
    }
    insert_sort( array, len );
    printf( "\n排序后数组序列:\n" );
    for ( i = 0;i < len;i++ )
    {
        printf( "%5d", array[i] );
    }
    getchar();
}

  评论这张
 
阅读(449)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016