簡體   English   中英

Shell排序未對數組的第一個元素進行排序

[英]Shell sort is not sorting the first element of an array

在此數據{7,8,4,2,3,9,5,8,4,1}上運行我的排序時,只有第一個元素沒有放在正確的位置。 我怎樣才能解決這個問題? 謝謝您的幫助。

public void segmentedInsertionSort(int[] array, int size, int h)
    {
        int temp;

        for(int i = h + 1 ;i < size;i++)
        {
            int j = i - h;


            while(j > 0)
            {
                if(array[j+h] < array[j])
                {
                    temp = array[j];
                    array[j] = array[j+h];
                    array[j+h] = temp;
                    j = j - h;
                }
                else
                {
                    j = 0;
                }
            }
        }
    }

    public void shellSort(int[] array, int size)
    {
        int h = size/2;

        while(h > 0)
        {
            segmentedInsertionSort(array,size,h);
            h = h/2;
        }            
    }
for(int i = h + 1 ;i < size;i++)
        {
            int j = i - h;


            while(j > 0)
            {
                if(array[j+h] < array[j])
                {
                    temp = array[j];
                    array[j] = array[j+h];
                    array[j+h] = temp;
                    j = j - h;
                }

在這一部分中,定義i = h + 1,然后增加i值。 因此,排序運行時j的值永遠不會小於1。 因此,它永遠不會處理數組的第一個元素。 您需要修復此部分。

我認為您已對某些變量進行了錯誤估價。您的變量j從未達到索引0,因此無法將7與該比較排序中的任何其他值進行比較。

更改:

for(int i = h +1 ;i < size;i++)for(int i = h ;i < size;i++)

while(j > 0)while(j >= 0)

else { j = 0; }

else{ j = -1; } else{ j = -1; }

最終代碼如下:

` void segmentedInsertionSort(int arr[], int size, int h)
{
    int temp;

    for(int i = h  ;i < size;i++)
    {
        int j = i-h ;


        while(j >= 0)
        {
            if(arr[j+h] < arr[j])
            {
                temp = arr[j];
                arr[j] = arr[j+h];
                arr[j+h] = temp;
                j = j - h;
            }
            else
            {
                j = -1;
            }
        }
    }
}
void shellSort(int arr[], int size)
{
    int h = size/2;

    while(h > 0)
    {
        print(arr);
        segmentedInsertionSort(arr,size,h);
        h = h/2;
    }            
}

暫無
暫無

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

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