簡體   English   中英

C中的插入排序算法

[英]Insertion Sort Algorithm in C

我對插入排序的以下代碼有疑問:

void insertion(Item a[], int ell, int r)                
{               
    int i;          
        for (i=ell+1; i<=r; i++)            
           compexch(a[ell], a[i]);          
    {           
        for (i=ell+2; i<=r; i++)        
        {       
            int j=i;    
            Item v=a[i];    
            while(less (v, a[j-1])) 
            {   
                a[j]=a[j-1];
                j--;
            }   
            a[j]=v;
        }       

    }           
}

好的,所以我的問題是關於while循環部分 - 我看到j遞減了,想知道當j = 0和a [-1]時會發生什么。 我不明白我們如何允許負面索引 - 如果我們比較的信息發生了變化並且while循環繼續運行會怎么樣? 謝謝。

我假設compexch(x,y)做了if (less(y,x)) { Item t = x; x=y; y=t } if (less(y,x)) { Item t = x; x=y; y=t } if (less(y,x)) { Item t = x; x=y; y=t } 因此,在第一個for循環完成之后a[ell]包含a[ell+1],...,a[r]中的最少Item 現在j用值i初始化,它至少是ell+2 ,所以我們在進入while循環時有j > ell 如果while循環沒有盡快終止,我們最終會得到j == ell 由於a[ell]已經被設置為范圍中的最小元素,因此less(v, a[ell])必然返回false,然后循環將終止。

所以j永遠不會減少到小於ell的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM