正文

二路插入排序 2006-08-20 12:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/manbuyuduan/17706.html

分享到:

#include <stdio.h>#include <stddef.h>#define ARR_SIZE 10/* 函数原型 */void bidir_insert( int keys[], int temp[], const size_t i );int main(void){    size_t i;    int keys[ARR_SIZE] = { 1050, 100, 150, 20, 9000, 5110, 3008, 1450, 5220, 500 };    int temp[ARR_SIZE];  /* 辅助数组 */        /* 进行二路插入排序 */    bidir_insert(keys, temp, ARR_SIZE);    /* 输出排序结果 */    for ( i = 0; i < ARR_SIZE; ++i ) {        printf("%d ", keys[i]);    }        printf("\nPress ENTER to quit...\n");    getchar();    return 0;}/* Begin of bidir_insert 05-11-12 12:00 */void bidir_insert( int keys[], int temp[], const size_t arr_size ){     size_t i, first, final = first = 0;          temp[0] = keys[0]; /* 将第一个元素放入辅助数组 */     /* 利用辅助数组 temp 进行二路插入排序 */     for ( i = 1; i < arr_size; ++i ) {         if ( temp[final] <= keys[i] ) {                          temp[++final] = keys[i];         } else if ( keys[i] <= temp[first] ) {             first = (first - 1 + arr_size) % arr_size;             temp[first] = keys[i];         } else {             size_t index;                          for ( index = (final - 1 + arr_size) % arr_size; ;                   index = (index - 1 + arr_size) % arr_size ) {                 if ( temp[index] <= keys[i] ) {                     size_t mid = final++;                     /* 元素后移 */                     while ( mid != index ) {                         temp[(mid + 1) % arr_size] = temp[mid];                         mid = (mid - 1 + arr_size) % arr_size;                     }                     temp[(index + 1) % arr_size] = keys[i];                                          break;                 }             }         }     }          /* 将 temp 的内容按顺序复制到 keys 中 */     for ( i = 0; i < arr_size; ++i ) {         keys[i] = temp[first];         first = (first + 1) % arr_size;     }}  /* End of bidir_insert */

阅读(6944) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册