java - 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;
}
}
解决方案
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。因此,它从不处理数组的第一个元素。你需要修复这部分。
推荐阅读
- c++ - 使用 ifstream 处理选项卡并将任意数量的值读入向量
- java - 如何根据 Java 中的用户输入创建新的文本文件?
- python - 如何在没有重复的列表中找到第一个值?
- python - 在熊猫数据框中按不同列分组后,我们应该如何取一列中的值的总和
- swift - 分段错误:11 Xcode 10.1
- javascript - 带有 XSS 的 CRSF 将 GET 请求中的 % 解析为 %25
- java - 让 Eclipse RCP Mac 应用程序显示闪屏
- sql - 如何使用 SQL 获取日期的最后 2 周
- oauth-2.0 - 是否有基于 OIDC 的基于 IDaaS 的社交登录的标准模式?
- android - Android jet pack架构组件导航在java中不起作用?