排序-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);
}
}
}
}
总之排序在学习语言过程中是很重要的知识点