首页 > 解决方案 > Shell排序不是对数组的第一个元素进行排序

问题描述

当我对这个数据 {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;
        }            
    }

标签: javashellsort

解决方案


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。因此,它从不处理数组的第一个元素。你需要修复这部分。


推荐阅读