输入数字并采用多种排序方法(java)

  

import java.util.Scanner;


public class test01 {

private static final String[] a = null;

/**
*
@param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
int m;
int a[] = new int[10];
Scanner in=new Scanner(System.in);
while(count<10){
System.out.print("请输入第"+(count+1)+"个数:");
// m=in.nextInt();
try{
m=Integer.parseInt(in.next());
a[count]=m;
}catch(NumberFormatException e){
System.out.println("请输入数值型数字!");
continue; //如果发生异常,则本次循环结束,转入进行下一次循环。
}
count++;
}
System.out.println("输入的数字如下:");
display(a);
System.out.println("冒泡排序后的数字");
BubbleSort1(a);
display(a);

System.out.println("直接插入排序后的数字");
InsertSort(a);
display(a);

SelectSort(a,count);

System.out.print("输入的数中最大值为:"+getMax(a));
}

/*
* 选择排序
*/
private static void SelectSort(int[] arr, int n) {
// TODO Auto-generated method stub
int i, j;
int min;

for(i = 0; i < n - 1; i++)
{
int index = 0;
min = arr[i];
for(j = i + 1; j < n; j++) //找出 i+1 - n 无序区的最小者与arr[i]交换
{
if(arr[j] < min)
{
min = arr[j];
index = j;
}
}
if(index != 0) //表明无序区有比arr[i]小的元素
{
arr[i] = arr[i]^arr[index];
arr[index] = arr[i]^arr[index];
arr[i] = arr[i]^arr[index];

/* arr[i]=arr[i]+arr[index];
arr[index]=arr[i]-arr[index];
arr[i]=arr[i]-arr[index];
*/
}
}
}


/*
* 直接插入排序
*/
private static void InsertSort(int[] a) {
// TODO Auto-generated method stub
int i,j,temp;
for(i=0;i<a.length;i++){
temp=a[i];
for(j=i;j>0 && temp<a[j-1];j--){
a[j]=a[j-1];
}
a[j]=temp;
}
}

//显示输入的数字
private static void display(int[] a) {
// TODO Auto-generated method stub
StringBuffer sb=new StringBuffer();
for(int i=0;i<a.length;i++){
sb.append(a[i]+"===");
}
//sb.deleteCharAt(sb.length());
System.out.println(sb.toString());
}

//对输入的数字进行排序
/*
* 采用从后向前比较的方法进行排序 冒泡排序
*/
private static void BulleSort(int[] a) {
// TODO Auto-generated method stub
int temp;
boolean exchange;
for(int i=1;i<a.length;i++){
exchange=false;
for(int k=a.length-1;k>=i;k--){ //从后向前检查是否发生逆序
if(a[k-1]>a[k]){
temp=a[k-1];
a[k-1]=a[k];
a[k]=temp;
exchange=true;
}
if(exchange=false) return; //本趟无逆序,停止处理
}
}
}

//采用从前向后比较的方法进行排序 冒泡排序
private static void BubbleSort1(int[] a){
int temp,i,k;
for(i=0;i<a.length;i++){
for(k=0;k<a.length-i-1;k++){
if(a[k]>a[k+1]){
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
}

public static int getMax(int[] a){
int max = 0;
for(int i=0;i<a.length-1;i++){
max=a[i];
for(int j=i+1;j<a.length;j++){
if(a[j]>max){
max=a[j];
}
}
}
return max;
}

}

  在此程序中,采用一种不同的方法来交换两个数值:

       方法一: a=a^b;  b=a^b;a=a^b;

      方法二:a=a+b;b=a-b;a=a-b;

而之前都是采用定义变量的方法来实现数据交换的。这点是值得注意!

           

posted @ 2011-11-10 10:22  月亮的影子  阅读(867)  评论(0编辑  收藏  举报