Java实现各种排序与查找

jopen 12年前
     <pre class="brush:java; toolbar: true; auto-links: false;">import java.io.*; import java.util.*; /**  * 排序与查找类  * @author 凌硕  * @serial 1.0  * */ public class SearchingList {     private int[] list;     private StringTokenizer st;     private int number;     public SearchingList() throws IOException{         BufferedReader in=new BufferedReader(new InputStreamReader(System.in));         String line;         System.out.print("请输入元素总个数:");         this.number=Integer.parseInt(in.readLine());         this.list=new int[number+1];         System.out.println("请输入各元素,用空格隔开");         line=in.readLine();         if(!line.isEmpty())             st=new StringTokenizer(line);         for(int i=1;i<this.number+1&&st.hasMoreTokens();i++){             this.list[i]=Integer.parseInt(st.nextToken());         }         System.out.println("原序列:");         this.output(list);         System.out.println();     }     /**      * 简单选择排序      * @author 凌硕      * */     public void simpleSelectSort(){         int j,k,temp;         int[] list=this.copyList();         System.out.println("简单选择排序:");         for(int i=1;i<this.number;i++){             j=i;             for(k=i+1;k<this.number+1;k++)                 if(list[k]<list[j])j=k;             if(j!=i){                 temp=list[j];                 list[j]=list[i];                 list[i]=temp;             }             System.out.print("第"+i+"趟:");             this.output(list);             System.out.println();         }     }     /**      * 折半插入排序      * */     public void biInsertionSort(){         int j,low,high,mid;         int[] list=this.copyList();         System.out.println("折半插入排序:");         for(int i=2;i<=this.number;i++){             list[0]=list[i];             low=1;             high=i-1;             while(low<=high){                 mid=(low+high)/2;                 if(list[0]<list[mid])                     high=mid-1;                 else                     low=mid+1;             }             for(j=i-1;j>=high+1;j--)                 list[j+1]=list[j];//右移                         list[high+1]=list[0];             //输出每一步的结果             System.out.print("第"+(i-1)+"趟:");             this.output(list);             System.out.println();         }     }     /**      * 冒泡排序      * @author 凌硕      * */     public void bubbleSort(){         int temp,lastExchange,num = 1;         int i=this.number;         int[] list=this.copyList();         System.out.println("冒泡排序:");         while(i>1){             lastExchange=1;             for(int j=1;j<i;j++)                 if(list[j]>list[j+1]){                     temp=list[j+1];                     list[j+1]=list[j];                     list[j]=temp;//交换元素                     lastExchange=j;//记下进行交换的记录位置                 }             i=lastExchange;             //输出每一步的结果             System.out.print("第"+num+"趟:");             for(int k=1;k<this.number+1;k++)                 System.out.print(list[k]+" ");             System.out.println();             num++;         }     }     /**      * 顺序查找      * @throws IOException      * @throws NumberFormatException      * */     public void dirSearch() throws NumberFormatException, IOException{         BufferedReader in=new BufferedReader(new InputStreamReader(System.in));         System.out.println("顺序查找:请输入所要查找的元素:");         int e = Integer.parseInt(in.readLine());         int k=1;         while(k<=this.number&&this.list[k]!=e)k++;         if(k<=this.number)System.out.println("在位置"+k+"找到元素"+e);         else System.out.println("没有找到元素"+e);     }     /**      * 折半查找      * @throws IOException      * @throws NumberFormatException      * */     public void binSearch() throws NumberFormatException, IOException{         BufferedReader in=new BufferedReader(new InputStreamReader(System.in));         System.out.println("折半查找:请输入所要查找的元素:");         int e = Integer.parseInt(in.readLine());         int low = 1;          int high = this.number;         int mid,temp,t=0;         int[] list=this.copyList();         //排序         for(int i1=1;i1<this.number;i1++){             int j = i1;             for(int k = i1+1;k<this.number+1;k++)                 if(list[k]<list[j])j=k;             if(j!=i1){                 temp=list[j];                 list[j]=list[i1];                 list[i1]=temp;             }         }         //查找         while(low <= high){             t++;                mid=(low + high)/2;                if(e==list[mid]){                    System.out.println("在第"+t+"趟找到元素"+e);//找到                    return;}                else if(e<list[mid])                 high=mid-1;//左半区               else low=mid+1;//右半区            }            System.out.println("没有找到元素"+e);      }     /**序列的副本*/     private int[] copyList(){         int[] inlist=new int[this.number+1];         for(int i=1;i<this.number+1;i++){             inlist[i]=this.list[i];         }         return inlist;     }     /**输出序列*/     private void output(int[] list){         for(int i=1;i<this.number+1;i++){             System.out.print(list[i]+" ");         }     } } </pre>    <br />