package sorted.demo;
/**
* @author wyl
* @time 2018年6月8日下午6:56:06
*
* 插入排序:
* 1、外循环:从第一个元素开始扫描 i
* 内循环:j=i+1 ,若j指向的值小于j-1指向的值,--j,向前比较;否则进行交换
*/
public class InsertSort3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={4,3,5,7,2,9,1};
insertSort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
private static void insertSort(int[] a) {
int len=a.length;
for (int i = 0; i < len-1; i++) {
int j=i+1;
while(j>=1&& a[j]<a[j-1]){
int tmp;
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
j--;
}
}
}
}
package sorted.demo;
/**
* @author wyl
* @time 2018年6月8日下午8:15:58
*
* 快速排序:
* 1、选择基准;
* 2、从左向右扫描,找到第一个大于基准的元素
* 从右向左扫描,找到第一个小于基准的元素
* 3、交换两个值;
* 4、较小值再与基准值进行交换
* 5、递归排序
*/
public class Quick1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={3, 6, 4, 1, 7, 9, 2};
sort(a, 0, 6);
show(a);
}
private static void show(int[] a) {
// TODO Auto-generated method stub
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
public static int partition(int[] a,int low ,int high){
int tmp=a[low];
int i=low;
int j=high+1;
while(true){
while(a[++i]<tmp){//从左向右扫描,找到第一个大于tmp
if (i==high) {
break;
}
}
while(a[--j]>tmp){//从右向左扫描,找到第一个小于tmp
if (j==low) {
break;
}
}
if (i>=j) {
break;
}
//“较大值”与“较小值”交换
int t=a[i];
a[i]=a[j];
a[j]=t;
}
//分割点处值 和主元交换
a[low]=a[j];
a[j]=tmp;
return j;
}
public static void sort(int[] a,int low,int high){
if (low>=high) {
return;
}
int med=partition(a, low, high);
sort(a, low, med-1);
sort(a, med+1, high);
}
}