排序-java

今天座右铭----每天的学习会让我们不断地进步!

往往面试中都会让我们用一种排序方法做一道排序题,下面我就罗列出快速排序、冒泡排序、插入排序、选择排序的java代码!

1、快速排序

public class Quick_sort {

 /**   * @param args   */

 public static void main(String[] args) {  

 // TODO Auto-generated method stub      

int arr1[]={1,0,-1,9,-100,90};           

QuickSort quciksort=new QuickSort();      

quciksort.sort(0,arr1.length-1,arr1);

      //输出最后结果     

  for(int i=0;i<arr1.length;i++){       

System.out.print(arr1[i]+" ");     

  }      

}  

}

class QuickSort{  

public void sort(int left,int right,int array[]){  

 int l=left;  

 int r=right;   

int pivot=array[(left+right)/2];   

int temp=0;  

 while(l<r){   

 while(array[l]<pivot) l++;   

 while(array[r]>pivot) r--;       

 if(l>=r) break;    

   temp=array[l];    

array[l]=array[r];   

 array[r]=temp;      

  if(array[l]==pivot) --r;   

 if(array[r]==pivot) ++l;   

}     

 if(l==r){  

  l++;   

 r--;   }   

if(left<r) sort(left,r,array);   

if(right>l) sort(l,right,array);

  }

 }

2、冒泡排序

public class Bubble_sort {

 /**   * @param args   */

 public static void main(String[] args) {

  // TODO Auto-generated method stub     

  int arr1[]={1,0,-1,9,-100,90};           

//创建一个Bubble类      

Bubble bubble=new Bubble();      

bubble.sort(arr1);      

//输出最后结果      

for(int i=0;i<arr1.length;i++){       

System.out.print(arr1[i]+" ");     

  }    

   }

 }

class Bubble{   

public void sort(int arr[]){    

int temp=0;       

//排序      

  //外部排序,决定一共走几趟       

for(int i=0;i<arr.length-1;i++){       

//内层循环,开始逐个比较,如前一个比后一个大,则交换        

for(int j=0;j<arr.length-1-i;j++){          

if(arr[j]>arr[j+1]){          

//换位          

 temp=arr[j];          

 arr[j]=arr[j+1];         

   arr[j+1]=temp;                 

     }        

}      

  }  

  }

}

3、插入排序

public class Insert_sort {

 /**   * @param args   */  

public static void main(String[] args) {  

 // TODO Auto-generated method stub      

int arr1[]={1,0,-1,9,-100,90};           

Insert insert=new Insert();      

insert.sort(arr1);      

// System.out.println("排序后:"+cal.getTime());      

//输出最后结果      

for(int i=0;i<arr1.length;i++){       

System.out.print(arr1[i]+" ");      

}      

}

 }

class Insert{  

//插入排序

 public void sort(int arr[]){  

 for(int i=1;i<arr.length;i++){    

int insertVal=arr[i];    

//insertVal准备和前一个数比较   

 int index=i-1;   

 while(index>=0&&insertVal<arr[index]){   

  //将把arr[index]向后移动    

 arr[index+1]=arr[index];    

 //让index向前移动   

  index--;    

}   

 //将insertVal插入到适当位置  

  arr[index+1]=insertVal;   

}

 }

}

4、选择排序

public class Select_sort {

 /**   * @param args   */  

public static void main(String[] args) {  

 // TODO Auto-generated method stub      

int arr1[]={1,0,-1,9,-100,90};           

//创建一个Select类       

Select select=new Select();      

  //在排序前打印系统时间       

//Calendar cal=Calendar.getInstance();     

   //System.out.println("排序前:"+cal.getTime());       

select.sort(arr1);      

// System.out.println("排序后:"+cal.getTime());     

  //输出最后结果      

for(int i=0;i<arr1.length;i++){      

  System.out.print(arr1[i]+" ");      

}      

}  

}

class Select{  

//选择排序  

public void sort(int arr[]){  

 int temp=0;   

for(int j=0;j<arr.length;j++){    

//我默认第一个数就是最小   

 int min=arr[j];   

 //记录最小数的下标   

 int minIndex=j;   

 for(int k=j+1;k<arr.length;k++){    

 if(min>arr[k]){     

 //修改最小    

  min=arr[k];   

   minIndex=k;   

  }   

 }    

//当退出for就找到最小值   

 temp=arr[j];  

  arr[j]=arr[minIndex];   

 arr[minIndex]=temp;  

}

 }

}

附:二分查找

public class BinaryFind {

 /**   * @param args   */

 public static void main(String[] args) {

  // TODO Auto-generated method stub      

  int arr[]={2,5,0,7,40,50};      

  //创建一个对象      

  Binary binary=new Binary();      

  binary.find(0,arr.length-1,7,arr);

//7是要找的数  

}

}

class Binary{

 public void find(int leftIndex,int rightIndex,int val,int arr[]){  

 //首先找到中间的数  

 int midIndex=(rightIndex+leftIndex)/2;   

int midVal=arr[midIndex];   

  if(rightIndex>=leftIndex){  

 //如果要找的数比minVal大  

 if(midVal>val){   

 //在arr左边数找  

  find(leftIndex,midIndex-1,val,arr);  

     }else if(midVal<val){

   //在右边找

   find(midIndex+1,rightIndex,val,arr);

  }else if(midVal==val){  

  System.out.println("找到下标"+midIndex);

  }  

}

}

}

总之排序在学习语言过程中是很重要的知识点

posted @ 2013-10-30 23:59  青春年华  阅读(204)  评论(0编辑  收藏  举报