gpt4 book ai didi

Java 和数组 - 按升序插入排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:06 26 4
gpt4 key购买 nike

所以我需要读取一个包含值的 txt 文件...

31 70 5 71 140 187 162 98 153 8 109 103 145 157 27 23 136 54 19 168 114 25 139 129 94

这是我现在的代码,我能够使用插入排序算法对值进行降序排序。但是,我也想知道如何更改插入排序方法以将值按升序排序。

import java.io.*;
import java.util.*;

public class Lab3
{
public static void main (String[] args) throws Exception
{
if (args.length < 1)
{
System.out.println( "Fatal Error. Enter a filename on the command line!\n");

System.exit(0);
}

int[] arr = new int[30];
int cnt=0;

Scanner infile = new Scanner( new FileReader(args[0]) );
while ( infile.hasNextInt() )
{
insertInOrder( arr, cnt, infile.nextInt() );
++cnt; // INCR COUNT AFTER EVERY INSERTION
printArray( arr, cnt ); // THEN PRINT ARRAY AFTER EVERY INSERTION
}
infile.close();

} // END main

// ======================================================================
// M E T H O D S
// ======================================================================


// YOU MUST FILL IN THIS METHOD
static void insertInOrder( int[] arr, int count, int newVal )
{
arr[count] = newVal; //This appends the number
for( count = 1; count<arr.length; count++)
{
int leftVal = count;
newVal = arr[count];

while((leftVal > 0) && (arr[leftVal-1]<newVal))
{
arr[leftVal] = arr[leftVal-1];
leftVal--;
}
arr[leftVal] = newVal;
}
}

// USE THIS METHOD AS GIVEN: DO NOT CHANGE
private static void printArray( int[] array, int count )
{
for( int i=0 ; i<count ;++i )
System.out.printf("%-4d",array[i] ); // "%-4d" means print arr[i] in 4 spaces left justified
System.out.println();
}

}

最佳答案

static void insertInOrder( int[] arr, int count, int newVal )
{
arr[count] = newVal; //This appends the number
for( count = 1; count<arr.length; count++)

在这里,您正在混合称为计数的不同变量。一个是输入参数,另一个是for循环的局部变量。将您的 for 循环更改为:

for( int i = 1; i<count; i++) // you need to loop only till the newest index just added.

关于从降序到升序的转换,如果你的降序算法有效,你只需要改变你的比较运算符:

while((leftVal > 0) && (arr[leftVal-1]>newVal))
^

关于Java 和数组 - 按升序插入排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com