亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩av一区二区三区| 波多野结衣一区二区三区| 捆绑调教一区二区三区| 国产成人精品一区二区三区四区| 丁香激情综合国产| 欧洲一区二区av| 91视视频在线直接观看在线看网页在线看 | 日韩一级成人av| 国产欧美日韩精品在线| 一区二区三区在线观看网站| 日本成人超碰在线观看| 国产成人免费在线| 欧美日高清视频| 欧美国产综合色视频| 天堂一区二区在线| 国产丶欧美丶日本不卡视频| 在线免费观看视频一区| 91.成人天堂一区| 国产肉丝袜一区二区| 一区二区三区欧美| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩高清一级片| av电影天堂一区二区在线观看| 欧美日韩亚洲不卡| 欧美国产精品中文字幕| 污片在线观看一区二区| 成人精品小蝌蚪| 精品欧美一区二区久久| 亚洲一区二三区| 91麻豆国产在线观看| 久久久精品中文字幕麻豆发布| 五月天激情综合| 91国偷自产一区二区三区成为亚洲经典 | 欧美性受xxxx黑人xyx| 中文字幕欧美国产| 国产乱码精品一品二品| 欧美久久久久久久久中文字幕| 国产精品乱码久久久久久| 久久国产夜色精品鲁鲁99| 欧美日韩亚洲不卡| 亚洲一区二区三区四区中文字幕| 成人国产精品免费观看动漫| 久久久一区二区三区捆绑**| 久久精品国产秦先生| 91精品久久久久久久91蜜桃| 国产精品成人一区二区艾草 | 日本韩国欧美在线| 亚洲欧美日韩精品久久久久| 国产成人在线观看免费网站| 日韩女优电影在线观看| 毛片av一区二区三区| 日韩一区二区三区免费看 | 精品一区二区三区不卡| 91精品欧美一区二区三区综合在| 亚洲成av人片在线观看无码| 欧美久久一区二区| 免费成人在线视频观看| 欧美肥妇毛茸茸| 日本va欧美va瓶| 日韩精品一区在线观看| 久久99深爱久久99精品| 精品少妇一区二区三区在线视频| 五月开心婷婷久久| 日韩视频不卡中文| 国产91高潮流白浆在线麻豆 | 亚洲成人av在线电影| 91麻豆精品91久久久久同性| 人人爽香蕉精品| 久久婷婷国产综合国色天香| 国产乱码一区二区三区| 欧美岛国在线观看| 风间由美一区二区av101| 最新国产成人在线观看| 欧美日韩亚洲综合在线| 秋霞国产午夜精品免费视频| www日韩大片| 成人h动漫精品一区二| 尤物视频一区二区| 91精品啪在线观看国产60岁| 国产在线不卡一区| 最新热久久免费视频| 欧美日韩国产一区二区三区地区| 亚洲成人综合视频| 精品福利在线导航| 国产91精品露脸国语对白| 最好看的中文字幕久久| 欧美日韩国产免费| 国产69精品久久99不卡| 亚洲一区二区三区四区五区黄| 精品久久久久久亚洲综合网| 91老司机福利 在线| 精品综合久久久久久8888| 综合久久给合久久狠狠狠97色 | 亚洲综合男人的天堂| 欧美精品一区男女天堂| 在线观看国产日韩| 国产麻豆9l精品三级站| 亚洲国产人成综合网站| 国产视频一区二区三区在线观看| 欧美日本不卡视频| 99在线热播精品免费| 亚洲成人久久影院| 国产精品免费视频网站| 欧美男男青年gay1069videost| 精品一区二区三区的国产在线播放| 亚洲日本欧美天堂| 日本一区二区三区国色天香| 91精品一区二区三区在线观看| 99久久精品免费精品国产| 狠狠色综合日日| 亚洲综合丁香婷婷六月香| 日本一区二区视频在线观看| 欧美一级高清片在线观看| 欧美性videosxxxxx| av亚洲精华国产精华精| 国产乱色国产精品免费视频| 日韩激情中文字幕| 一区二区三区欧美日| 欧美成人激情免费网| 欧美日韩精品免费| 91精品1区2区| 国产91综合一区在线观看| 三级欧美韩日大片在线看| 亚洲免费视频成人| 国产精品国产三级国产aⅴ入口| 久久久久久免费| 欧美高清视频一二三区| 欧美网站大全在线观看| 日本高清不卡在线观看| 97久久超碰国产精品| 成人免费av资源| 麻豆91免费看| 蜜臀av一级做a爰片久久| 五月激情综合网| 免费观看在线综合色| 亚洲免费视频中文字幕| 亚洲欧美色一区| 亚洲少妇30p| 久久久精品tv| 日韩欧美一区在线| 欧美日本在线观看| 91麻豆精品国产自产在线观看一区| 91精品国产乱| 久久奇米777| 亚洲国产高清不卡| 1024国产精品| 亚洲成人av免费| 免费成人你懂的| 国产很黄免费观看久久| av中文字幕亚洲| 精品视频999| 日韩欧美二区三区| 国产三级精品视频| 国产精品高清亚洲| 亚洲国产另类av| 麻豆91在线观看| 成人黄色小视频| 欧美在线影院一区二区| 欧美一区午夜视频在线观看 | 亚洲欧美激情视频在线观看一区二区三区 | 国产精品亚洲专一区二区三区 | 精品免费99久久| 国产亚洲一区二区三区在线观看 | 国内精品国产成人国产三级粉色| 日韩av中文字幕一区二区三区| 精品一区二区三区蜜桃| 99免费精品视频| 8x福利精品第一导航| 日本一区二区三区在线不卡| 亚洲蜜桃精久久久久久久| 日韩国产欧美在线视频| 国产成人免费视频网站| 欧美日韩久久一区| 国产婷婷色一区二区三区四区| 亚洲柠檬福利资源导航| 麻豆传媒一区二区三区| 欧美性高清videossexo| 《视频一区视频二区| 国产精品一区二区在线播放| 欧美草草影院在线视频| 午夜成人免费视频| 欧美揉bbbbb揉bbbbb| 一区二区在线电影| 92国产精品观看| 国产精品天美传媒沈樵| 国产一区二区不卡| 精品福利一区二区三区| 美女任你摸久久 | 日本电影亚洲天堂一区| 国产精品久久久久久久久快鸭 | 欧美日韩专区在线| 亚洲精品久久嫩草网站秘色| 99久久精品久久久久久清纯| 日本一区二区视频在线| 国产成人av资源| 中文字幕av一区二区三区高 | 久久狠狠亚洲综合| 精品久久久久久久久久久久久久久久久 | 国产尤物一区二区在线| 精品国产91乱码一区二区三区 |