排序
package com.qifengle.java;
public class Sort {
public static void main(String []args){
int []arr={9,8,7,6,5,4,3,2,1};
int []temp=new int[10];
//sort(arr,0,arr.length-1,temp);
//sort(arr,arr.length);
sort(arr);
for(int i:arr){
System.out.print(i+"、");
}
}
/**
* 插入排序
* @param arr 待排序的数组
*/
public static void insertSort(int []arr){
int size=arr.length;
for(int i=1;i<size;i++){
int j=i;
while(j>0 && arr[j]<arr[j-1]){
swap(arr,i,j);
j--;
}
}
}
/**
* 冒泡排序
* @param arr 待排序的数组
*/
public static void sort(int []arr){
int size=arr.length;
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
if(arr[i]>arr[j]){
swap(arr,i,j);
}
}
}
}
/**
* 选择排序
* @param arr 即将排序的数组
* @param size 即将排序的数组的长度
*/
public static void sort(int []arr,int size){
for(int i=0;i<size-1;i++){
int min=i;
for(int j=i+1;j<size;j++){
if(arr[min]>arr[j]){
min=j;
}
}
if(min!=i){
swap(arr,min,i);
}
}
}
/**
* 交换两个数组的值
* @param arr 传入的数组
* @param a 数组的下标a
* @param b 数组的下标b
*/
public static void swap(int []arr,int a,int b){
arr[a]=arr[a]+arr[b];
arr[b]=arr[a]-arr[b];
arr[a]=arr[a]-arr[b];
}
/**
* 归并排序分
* @param arr 待排序的数组
* @param left 数组的左边界
* @param right 数组的右边界
* @param temp 临时数组
*/
public static void sort(int []arr,int left,int right,int []temp){
//System.out.println(left+""+right);
if(left<right){
int mid=(left+right)/2;
sort(arr,left,mid,temp);
sort(arr,mid+1,right,temp);
sort(arr,left,mid,right,temp);
}
}
/**
* 归并排序,合
* @param arr
* @param left
* @param mid
* @param right
* @param temp
*/
public static void sort(int []arr,int left,int mid,int right,int []temp){
int i=left;
int j=mid+1;
int t=0;
while(i<=mid&&j<=right){
if(arr[i]<=arr[j]){
temp[t++]=arr[i++];
}else{
temp[t++]=arr[j++];
}
}
while(i<=mid){
temp[t++]=arr[i++];
}
while(j<=right){
temp[t++]=arr[j++];
}
t=0;
while(left<=right){
arr[left++]=temp[t++];
}
}
}