亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sort.c

?? C語言高級實例解析的源代碼
?? C
字號:

#include "tdestr.h"
#include "common.h"
#include "tdefunc.h"
#include "define.h"



int  sort_box_block( WINDOW *window )
{
int  prompt_line;
int  block_type;
line_list_ptr ll;
register file_infos *file;
WINDOW *sw;
int  rc;
char line_buff[(MAX_COLS+1)*2]; 

   rc = OK;
   prompt_line = window->bottom_line;
   entab_linebuff( );
   if (un_copy_line( window->ll, window, TRUE ) == ERROR)
      return( ERROR );
   check_block( );
   if (g_status.marked == TRUE) {
      file  = g_status.marked_file;
      block_type = file->block_type;
      if (block_type == BOX) {
      
         rc = get_sort_order( window );
         if (rc != ERROR) {
            file->modified = TRUE;
            if (mode.do_backups == TRUE) {
               sw = g_status.window_list;
               for (; ptoul( sw->file_info ) != ptoul( file );)
                  sw = sw->next;
               backup_file( sw );
            }

           
            sort.block_len = file->block_ec + 1 - file->block_bc;

          
            save_screen_line( 0, prompt_line, line_buff );
            eol_clear( 0, prompt_line, g_display.text_color );
            set_prompt( block22a, prompt_line );

           
            sort.bc  = g_status.marked_file->block_bc;
            sort.ec  = g_status.marked_file->block_ec;
            sort.order_array = (mode.search_case == IGNORE) ?
                                    sort_order.ignore : sort_order.match;

          
            ll = file->block_start->prev;
            quick_sort_block( file->block_br, file->block_er,
                              file->block_start, file->block_end );

            
            if (ll == NULL)
               ll = file->line_list;
            else
               ll = ll->next;
            set_prompt( block22b, prompt_line );
            insertion_sort_block( file->block_br, file->block_er, ll );

           
            file->dirty = GLOBAL;
            restore_cursors( file );
            restore_screen_line( 0, prompt_line, line_buff );
         }
      } else {
        
         error( WARNING, prompt_line, block23 );
         rc = ERROR;
      }
   } else {
     
      error( WARNING, prompt_line, block24 );
      rc = ERROR;
   }
   return( rc );
}



void quick_sort_block( long low, long high, line_list_ptr low_node,
                       line_list_ptr high_node )
{
long low_rline_stack[24];
long high_rline_stack[24];
line_list_ptr low_node_stack[24];
line_list_ptr high_node_stack[24];
long low_count;
long high_count;
long count;
line_list_ptr low_start;
line_list_ptr low_head;
line_list_ptr low_tail;
line_list_ptr high_end;
line_list_ptr high_head;
line_list_ptr high_tail;
line_list_ptr equal_head;
line_list_ptr equal_tail;
line_list_ptr walk_node;
line_list_ptr median_node;
int  i;
int  stack_pointer;

   assert( low_node->len != EOF);
   assert( high_node->len != EOF);

   stack_pointer = 0;
   for (;;) {

      
      while (high - low > 25) {

         assert( high >= 1 );
         assert( low  >= 1 );
         assert( low  <= high );

        
         walk_node  = low_node;
         count = (high - low) / 2;
         for (; count > 0; count--)
            walk_node = walk_node->next;

         
         load_pivot( low_node );
         if (compare_pivot( walk_node ) < 0) {
            low_head   = walk_node;
            median_node = low_node;
         } else {
            low_head   = low_node;
            median_node = walk_node;
         }
         high_head = high_node;
         load_pivot( median_node );
         if (compare_pivot( high_node ) < 0) {
            high_head   = median_node;
            median_node = high_node;
         }
         load_pivot( median_node );
         if (compare_pivot( low_head ) > 0) {
            low_tail    = median_node;
            median_node = low_head;
            low_head    = low_tail;
         }

         load_pivot( median_node );

         assert( compare_pivot( low_head ) <= 0 );
         assert( compare_pivot( high_head ) >= 0 );

         walk_node = low_node;
         for (i = 0; ; walk_node = walk_node->next) {
            if (compare_pivot( walk_node ) == 0)
               break;
            i = 1;
         }

         
         low_start  = low_node->prev;
         high_end   = high_node->next;
         low_head   = low_tail  = NULL;
         high_head  = high_tail = NULL;
         low_count  = high_count = 0;

         
         if (i == 0)
            walk_node = equal_head = equal_tail = low_node;
         else {
            equal_head = equal_tail = walk_node;
            equal_head->next->prev = equal_head->prev;
            equal_head->prev->next = equal_head->next;
            equal_head->next = low_node;
            walk_node = equal_head;
         }
         load_pivot( equal_head );

        
         for (count=low+1; count <= high; count++) {
            walk_node = walk_node->next;
            i = compare_pivot( walk_node );
            if (i > 0) {
               if (high_head == NULL)
                  high_head = high_tail = walk_node;
               else {
                  high_tail->next = walk_node;
                  walk_node->prev = high_tail;
                  high_tail = walk_node;
               }

               ++high_count;
            } else if (i < 0) {
               if (low_head == NULL)
                  low_head = low_tail = walk_node;
               else {
                  low_tail->next = walk_node;
                  walk_node->prev = low_tail;
                  low_tail = walk_node;
               }

               
               ++low_count;
            } else {
               equal_tail->next = walk_node;
               walk_node->prev = equal_tail;
               equal_tail = walk_node;
            }
         }

         assert( low_count >= 0 );
         assert( low_count < high - low );
         assert( high_count >= 0 );
         assert( high_count < high - low );

         
         if (low_count > 0) {
            low_head->prev = low_start;
            if (low_start != NULL)
               low_start->next = low_head;
            else
               g_status.marked_file->line_list = low_head;
            low_tail->next = equal_head;
            equal_head->prev = low_tail;
         } else {
            equal_head->prev = low_start;
            if (low_start != NULL)
               low_start->next = equal_head;
            else
               g_status.marked_file->line_list = equal_head;
         }
         if (high_count > 0) {
            high_head->prev = equal_tail;
            equal_tail->next = high_head;
            high_tail->next = high_end;
            high_end->prev  = high_tail;
         } else {
            equal_tail->next = high_end;
            high_end->prev   = equal_tail;
         }

         
         if (low_count > high_count) {

           
            if (high_count > 25) {
               low_rline_stack[stack_pointer]  = low;
               high_rline_stack[stack_pointer] = low + low_count - 1;
               low_node_stack[stack_pointer]   = low_head;
               high_node_stack[stack_pointer]  = low_tail;
               ++stack_pointer;
               low       = high - high_count + 1;
               high      = high;
               low_node  = high_head;
               high_node = high_tail;
            } else {
               low       = low;
               high      = low + low_count - 1;
               low_node  = low_head;
               high_node = low_tail;
            }
         } else {

            if (low_count > 25) {
               low_rline_stack[stack_pointer]  = high - high_count + 1;
               high_rline_stack[stack_pointer] = high;
               low_node_stack[stack_pointer]   = high_head;
               high_node_stack[stack_pointer]  = high_tail;
               ++stack_pointer;
               low       = low;
               high      = low + low_count - 1;
               low_node  = low_head;
               high_node = low_tail;
            } else {
               low       = high - high_count + 1;
               high      = high;
               low_node  = high_head;
               high_node = high_tail;
            }
         }

         assert( stack_pointer < 24 );
      }

     
      --stack_pointer;
      if (stack_pointer < 0)
         break;
      low       = low_rline_stack[stack_pointer];
      high      = high_rline_stack[stack_pointer];
      low_node  = low_node_stack[stack_pointer];
      high_node = high_node_stack[stack_pointer];
   }
}



void insertion_sort_block( long low, long high, line_list_ptr first_node )
{
long down;                      
long pivot;                     
long count;
line_list_ptr pivot_node;       
line_list_ptr down_node;        
text_ptr key;
int  dirty_flag;
int  len;

  
   if (low < high) {

      count = (int)(high - low) + 1;
      pivot_node = first_node->next;
      for (pivot=1; pivot < count; pivot++) {
         load_pivot( pivot_node );
         key = pivot_node->line;
         len = pivot_node->len;
         dirty_flag = pivot_node->dirty;
         down_node = pivot_node;
         for (down=pivot-1; down >= 0; down--) {
            
            if (compare_pivot( down_node->prev ) > 0) {
               down_node->line = down_node->prev->line;
               down_node->len = down_node->prev->len;
               down_node->dirty = down_node->prev->dirty;
            } else
               break;
            down_node = down_node->prev;
         }
         down_node->line = key;
         down_node->len  = len;
         down_node->dirty = (char)dirty_flag;
         pivot_node = pivot_node->next;
      }
   }
}



void load_pivot( line_list_ptr node )
{
   sort.pivot_ptr = node->line;
   sort.pivot_len = node->len;
}



int  compare_pivot( line_list_ptr node )
{
register int len;
register int bc;
int  rc;
int  left_over;

   len = node->len;
   bc  = sort.bc;

   assert( bc >= 0 );
   assert( len >= 0 );

   
   if (len < bc+1) {
      if (sort.pivot_len < bc+1)
         return( 0 );
      else
         return( sort.direction == ASCENDING ?  -1 : 1 );

  
   } else if (sort.pivot_len < bc+1) {
      if (len < bc+1)
         return( 0 );
      else
         return( sort.direction == ASCENDING ?  1 : -1 );
   } else {

      if (len == sort.pivot_len)
         left_over = 0;
      else if (len > sort.ec  &&  sort.pivot_len > sort.ec)
         left_over = 0;
      else {

         
         if (sort.direction == ASCENDING)
            left_over =  len > sort.pivot_len ? 1 : -1;
         else
            left_over =  len > sort.pivot_len ? -1 : 1;
      }

     
      if (len > sort.pivot_len)
         len = sort.pivot_len;
      len = len - bc;
      if (len > sort.block_len)
         len = sort.block_len;

      assert( len > 0 );

      if (sort.direction == ASCENDING)
         rc = my_memcmp( node->line + bc, sort.pivot_ptr + bc, len );
      else
         rc = my_memcmp( sort.pivot_ptr + bc, node->line + bc, len );

      
      if (rc == 0)
         rc = left_over;
      return( rc );
   }
}



int  my_memcmp( text_ptr s1, text_ptr s2, int len )
{
unsigned char *p;
register int c;

   assert( len >= 0 );
   assert( len < MAX_LINE_LENGTH );
   assert( s1 != NULL );
   assert( s2 != NULL );

   if (len == 0)
      return( 0 );

   p = sort.order_array;


   if (len < 10) {
      for (;len > 0  &&  (c = (int)p[*s1] - (int)p[*s2]) == 0;
                                              s1++, s2++, len--);
      return( c );
   } else {

      ASSEMBLE {



        push    ds                      
        push    si
        push    di
        push    bp

        xor     ax, ax                  
        mov     cx, WORD PTR len        
        cmp     cx, 0                   
        jle     get_out                 

        mov     bx, WORD PTR s2         
        mov     ax, WORD PTR s2+2
        mov     es, ax                  
        mov     si, WORD PTR s1
        mov     ax, WORD PTR s1+2
        mov     ds, ax                  
        mov     bp, p                   
        xor     ax, ax                  
        xor     dx, dx                  
      }
top:

   ASSEMBLE {
        mov     al, BYTE PTR ds:[si]    
        mov     di, ax
        mov     al, BYTE PTR [bp+di]    
        mov     dl, BYTE PTR es:[bx]    
        mov     di, dx
        mov     dl, BYTE PTR [bp+di]    
        sub     ax, dx                  
        jne     get_out
        inc     bx
        inc     si
        dec     cx
        cmp     cx, 0
        jg      top                     
      }
get_out:

   ASSEMBLE {
        pop     bp                      
        pop     di
        pop     si
        pop     ds                      
      }
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看91av| 在线电影一区二区三区| 国内精品久久久久影院一蜜桃| 亚洲国产精品人人做人人爽| 亚洲黄一区二区三区| 亚洲女同一区二区| 一级日本不卡的影视| 亚洲一区二区三区四区不卡| 亚洲午夜激情网页| 日韩av电影免费观看高清完整版在线观看 | 国产精品99久久久久久久女警| 毛片一区二区三区| 久久精品国产第一区二区三区| 蜜桃精品视频在线观看| 97精品久久久午夜一区二区三区| aaa欧美色吧激情视频| 91免费国产在线观看| 欧美四级电影网| 欧美大片日本大片免费观看| 久久久精品免费网站| 亚洲欧美区自拍先锋| 日本美女视频一区二区| 国产一区二三区| 99国产精品久| 欧美猛男超大videosgay| 日韩精品中文字幕一区二区三区| 久久毛片高清国产| 亚洲在线成人精品| 国产美女视频一区| 欧美中文字幕一区二区三区| 日韩三级中文字幕| 国产精品欧美久久久久无广告| 一区二区三区不卡在线观看| 六月丁香综合在线视频| 本田岬高潮一区二区三区| 欧美色综合网站| 国产日韩亚洲欧美综合| 亚洲成人动漫在线免费观看| 国产成人免费在线观看| 91精品在线麻豆| 国产精品丝袜一区| 免费三级欧美电影| 欧美在线播放高清精品| 国产色91在线| 免费观看在线色综合| 日本伦理一区二区| 久久久国产精华| 日本欧美加勒比视频| 日韩午夜av电影| 亚洲精品你懂的| 成人亚洲精品久久久久软件| 欧美高清视频www夜色资源网| 国产精品久久久久一区二区三区 | 99精品视频在线播放观看| 欧美一区二区二区| 亚洲小说欧美激情另类| 成人av资源站| 久久精品水蜜桃av综合天堂| 日韩高清电影一区| 色天天综合久久久久综合片| 国产日韩综合av| 美女视频黄a大片欧美| 欧美日韩精品一区二区三区蜜桃| 国产精品大尺度| www.亚洲精品| 欧美激情在线看| 粉嫩嫩av羞羞动漫久久久| 久久综合av免费| 狠狠色综合日日| 久久综合狠狠综合久久激情| 捆绑变态av一区二区三区| 日韩女优av电影在线观看| 免费日本视频一区| 日韩一区二区在线看| 天堂在线一区二区| 欧美日韩精品系列| 天使萌一区二区三区免费观看| 色播五月激情综合网| 亚洲国产日韩精品| 欧美色偷偷大香| 热久久久久久久| 精品日韩成人av| 丁香婷婷综合激情五月色| 国产精品三级av在线播放| aaa欧美大片| 亚洲欧美电影一区二区| 欧美日韩中文精品| 日本va欧美va欧美va精品| 91麻豆精品国产91| 久久精品99国产精品| 久久一留热品黄| av影院午夜一区| 国产精品综合在线视频| 中文字幕第一区| 91激情五月电影| 久久精品噜噜噜成人88aⅴ| 久久久久久久久久久久久夜| av资源站一区| 日本aⅴ亚洲精品中文乱码| 久久尤物电影视频在线观看| 99久久综合国产精品| 日本视频免费一区| 欧美经典一区二区| 欧美日韩成人激情| 国产精品99久久久久久宅男| 亚洲视频免费在线观看| 欧美精品色综合| 国产乱理伦片在线观看夜一区 | 亚洲高清视频的网址| 日韩欧美综合一区| 91丨porny丨首页| 视频一区国产视频| 国产精品色哟哟| 日韩一级视频免费观看在线| 成人影视亚洲图片在线| 日韩经典一区二区| 国产精品久久久一区麻豆最新章节| 欧美日韩免费观看一区三区| 国产一区二区精品在线观看| 亚洲美女视频在线| 欧美一卡二卡在线观看| 99re热这里只有精品视频| 日韩国产一二三区| 亚洲精品视频在线看| 国产欧美一区二区精品久导航 | 亚洲宅男天堂在线观看无病毒| 精品免费视频.| 在线一区二区三区四区| 国产成都精品91一区二区三| 三级久久三级久久| 亚洲精品国产高清久久伦理二区| 久久网站热最新地址| 欧美军同video69gay| 在线一区二区三区做爰视频网站| 国产福利一区二区三区视频 | 日本一区二区综合亚洲| 欧美一区二区观看视频| 欧美日韩精品系列| 在线观看91精品国产入口| 成人三级伦理片| 国产精品一色哟哟哟| 毛片不卡一区二区| 麻豆国产精品777777在线| 亚洲国产精品天堂| 亚洲午夜电影在线观看| 一区二区视频在线| 一区二区在线观看视频在线观看| 中文字幕一区二区三区在线不卡 | 欧美日韩国产高清一区二区| 色诱亚洲精品久久久久久| www.综合网.com| 99re免费视频精品全部| 99久久99久久精品国产片果冻 | 在线电影院国产精品| 欧美日韩激情一区| 欧美一区二区在线播放| 精品污污网站免费看| 91精品麻豆日日躁夜夜躁| 欧美高清视频在线高清观看mv色露露十八 | 91麻豆精品久久久久蜜臀| 91麻豆精品国产综合久久久久久 | 国产91在线看| 狠狠色狠狠色综合日日91app| 美女视频黄免费的久久| 国产一区二三区| 成人免费毛片app| 色天使色偷偷av一区二区| 欧美亚洲免费在线一区| 欧美人体做爰大胆视频| 日韩视频免费直播| 久久久不卡网国产精品二区 | 亚洲一区二区在线视频| 天堂一区二区在线| 久久av中文字幕片| 国产mv日韩mv欧美| 91福利在线观看| 91精品国产综合久久久久久久| 日韩欧美一级精品久久| 国产亚洲一区二区三区四区| 国产精品色哟哟| 亚洲国产精品一区二区久久 | 91麻豆产精品久久久久久| 日本久久电影网| 欧美精品色综合| 国产精品嫩草影院com| 亚洲午夜久久久久久久久久久| 日本女人一区二区三区| 成人蜜臀av电影| 欧美一区二区三区视频在线 | 中文文精品字幕一区二区| 亚洲激情自拍视频| 久久电影网站中文字幕| 色诱视频网站一区| 久久九九久久九九| 亚洲国产一区在线观看| 懂色av一区二区三区蜜臀| 欧美日韩另类一区| 国产精品大尺度| 国产一区二区美女| 欧美男男青年gay1069videost|