代码:
package test;//求最大子数组
import java.util.Scanner;
import javax.swing.JOptionPane;
public class shuzu {
public static void main(String []args)
{
Scanner s=new Scanner(System.in);
String str1=JOptionPane.showInputDialog(null,"请输入数组数目:");
int sum=Integer.parseInt(str1);
int []a=new int[sum];
JOptionPane.showMessageDialog(null,"请输入"+sum+"个数");
for(int i=0;i<sum;i++)
{
String str2=JOptionPane.showInputDialog(null,"请输入第"+(i+1)+"个数:");
a[i]=Integer.parseInt(str2);;
}
s.close();
int sum1=0;
for(int i=1;i<=sum;i++)
{
sum1=sum1+i;
}
int [] b=new int[sum1];
int temp1=0;
int max=a[0];
int temp3=0;
int temp4=0;
for(int i=0;i<sum;i++)
{
int temp=0;
for(int k=0;k<sum-i;k++)
{
temp=temp+a[i+k];
b[temp1]=temp;
if(max<b[temp1])
{ temp3=i;
temp4=k+1;
max=b[temp1];
}
if(temp1==0)
System.out.println("第一次:a[0]为最大子数组是"+a[0]);
else{
if(max==b[temp1])
System.out.println("第"+(temp1+1)+"次:a["+temp3+"]到a["+(temp3+temp4-2)+"]与a["+i+"]到a["+(i+k)+"]比较,a["+i+"]到a["+(i+k)+"]的和最大为:"+temp);
else
System.out.println("第"+(temp1+1)+"次:a["+i+"]到a["+(i+k)+"]与a["+temp3+"]到a["+(temp3+temp4-1)+"]比较,a["+temp3+"]到a["+(temp3+temp4-1)+"]的和最大为:"+max);
}
temp1++;
}
}
System.out.println("所有子数组和数组如下:");
for(int i=0;i<sum1-1;i++)
{
System.out.print(b[i]+" ");
}
System.out.println("");
System.out.println("冒泡排序如下");
int temp=1;
for(int i=0;i<sum1-1;i++)
{
System.out.print("第"+temp+"次排序:");
for(int k=0;k<sum1-1-i;k++)
{
if(b[k]<b[k+1])
{
int temp2=b[k];
b[k]=b[k+1];
b[k+1]=temp2;
}
}
for(int j=0;j<sum1-1;j++)
{
System.out.print(b[j]+" ");
}
System.out.println("");
temp++;
}
JOptionPane.showMessageDialog(null,"最大的子数组和为"+b[0]);
}
}