在这个程序中,我找到了使用插入排序的随机数组的排序数组。所以我现在遇到的问题是,在这个程序中,我还需要找到所做的比较次数以及该程序中的分配次数。我已经尝试了很多方法来查找比较和分配。我认为我有比较下来,但当我输出比较和分配时,他们应该彼此紧密相等。在我输出它的程序中,它在某些情况下或所有情况下并不完全相同。我能做什么?我不认为我使用冒泡排序,除非我......我将不得不从头开始。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package insertionsort;
import java.util.*;
/**
*
* @author Owner
*/
public class InsertionSort
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner input= new Scanner(System.in);
int randomInt;
int min;
int max;
int [] array;
int random=0;
int assign;
int temp;
int comparison=0;
int assignment=0;
int length;
int a;
int k;
System.out.print("How many random integers? ");
randomInt=input.nextInt();
System.out.print("Enter the minimum: ");
min=input.nextInt();
System.out.print("Enter the maximum: ");
max=input.nextInt();
array=new int [randomInt];
for (a=0; a<randomInt; a++)
{
assign=random;
random=(int)((Math.random()*(max-min+1)))+min;
array[a]=random;
}
System.out.println();
System.out.print("The randomized array is ");
for(int dot=0; dot<randomInt;dot++)
{
if (dot==randomInt-1)
System.out.printf("%d.", array[dot]);
else
System.out.printf("%d, ",array[dot]);
}
System.out.println();
length=array.length;
for (a=1;a<length; a++)
{
for (int b=0; b<a;b++)
{
comparison++;
if(array[b]>array[a])
{
temp=array[b];
array[b]=array[a];
for (k=a;k>b;k--)
{
array[k]=array[k-1];
assignment++;
}
array[b+1]=temp;
assignment++;
}
}
}
System.out.print("The sorted array is ");
for (a=0;a<length; a++)
{
if (a==length-1)
System.out.printf("%d.",array[a]);
else
System.out.printf("%d, ",array[a]);
}
System.out.println();
System.out.println("Total comparison count during sorting is " +comparison+ ".");
System.out.println("Total assignment count during sorting is " +(assignment)+ ".");
}
}
答案 0 :(得分:0)
计算比较和分配的最简单方法是创建一个类,该类将执行比较和分配并使用其方法而不是<
,>
和'='。当然,它的方法将计算比较和分配。您也可以将int
与您的类包装在一起,并将其与自己的方法进行比较/分配。