1.直接插入排序
//直接插入排序
public static void insertSort(int []a,int n){
if(n>a.length){
System.out.println("n值错误");
System.exit(0);
}
for(int i=1;i<n;i++){
int tmp = a[i];
int j;
for(j=i-1;j>=0;j--){
if(tmp<a[j]){
a[j+1] = a[j];
}
else break;
}
a[j+1] = tmp;
}
}
2.直接选择排序
//直接选择排序
public static void selectSort(int []a,int n){
if(n>a.length){
System.out.println("n值错误");
return;
}
for(int i=0;i<n;i++){
int j;
for(j=i+1;j<n;j++){
if(a[j]<a[i]){
int tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}
}
}
3.冒泡排序
//冒泡排序
public static void bubbleSort(int []a,int n){
if(n>a.length){
System.out.println("n值错误");
return;
}
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(a[j]<a[j-1]){
int tmp = a[j];
a[j] = a[j-1];
a[j-1]=tmp;
}
}
}
}
4.快速排序(递归算法)
public static int quickSortUnit(int []a,int start ,int end){
int i = start;
int j = end;
while(i<j){
while(i<j&&a[i]<=a[j]){
j--;
}
if(i<j){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
while(i<j&&a[i]<=a[j]){
i++;
}
if(i<j){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
return i;
}
public static void qucikSort(int a[],int start,int end){
if(start>end){
return;
}
int index = quickSortUnit(a,start,end);
quickSort(a, start, index-1);
qucikSort(a, index+1, end);
}
5.归并排序
public static void mergeSort(int a[],int start ,int end){
if(start>=end){
return;
}
int mid = (start+end)/2;
mergeSort(a, start, mid);
mergeSort(a, mid+1, end);
merge(a, start, end, mid);
}
/**
* 归并操作,将两个有序的序列合并成一个有序的序列
* @param a
* @param b
*/
public static void merge(int [] a,int start,int end ,int mid){
int c [] = new int[a.length];//临时数组
int i = start;//
int j = mid+1;
int k = start;//记录c插入的下一个元素的位置
while(i<=mid&&j<=end){
if(a[i]<a[j]){
c[k++] =a[i++];
}else{
c[k++] = a[j++];
}
}
if(i<=mid){
while(i<=mid){
c[k++] =a[i++];
}
}else if(j<=end){
while(j<=end){
c[k++] = a[j++];
}
}
for(i=start;i<=end;i++){
a[i] = c[i];
}
}