您的位置:首页 > 编程语言 > Java开发

常见排序(java版)

2015-12-14 22:06 609 查看
一丶折半插入排序

public class binInsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b=binInsertSort(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(a[i]+"\t");
}
}
public static int[] binInsertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
//保存插入元素
int temp=a[i];
//设置初始区间
int hi=i-1;
int lo=low;
//折半决定插入位置
while(lo<=hi){
int mid=(hi+lo)/2;
if(temp<a[mid]){
hi=mid-1;
}else{
lo=mid+1;
}
}
//移动在temp那个之后的元素
for(int j=i-1;j>hi;j--)
a[j+1]=a[j];
//插入元素temp
a[hi+1]=temp;
}
return a;
}

二丶冒泡排序
public class bubbleSort {
private static int[] a={4,3,5,7,2,1,10,6};
public static void main(String[] args) {
int b[]=bubble(a,0,8);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
}
public static int[] bubble(int[] a,int low,int high){
for(int i=1;i<a.length;i++){
for(int j=low;j<a.length-i;j++){
if(a[j]<=a[j+1]){
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
}

三丶堆排序
public class heapSort {
private static int [] a={2,1,3,5,4,7,6,9,10,8};
public static void main(String[] args) {
a=heapSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
}
private static void heapAdjust(int [] a,int low,int high){
int temp=a[low];
//沿关键字较大的元素向下进行帅选
for(int j=2*low;j<=high;j=j*2){
//j指向关键字较大的元素
if(j<high&&a[j]<a[j+1])j++;
//若temp比其孩子都大,则插入到low所指位置
if(temp>a[j])break;
a[low]=a[j]; low=j;
}
a[low]=temp;
}
private static int[] heapSort(int[] a){
int n=a.length-1;
//初始化建堆
for(int i=n/2;i>=1;i--)
heapAdjust(a,i,n);
//不断输出堆顶元素并调整r[1...i-1]为新堆
for(int i=n;i>1;i--){
//交换堆顶与堆低元素
int temp=a[1];
a[1]=a[i];
a[i]=temp;
//调整
heapAdjust(a,1,i-1);
}
return a;
}
}

四丶直接插入排序
public class InsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b;
b=insertSortAnother(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
<span style="white-space:pre"> </span>public static int[] insertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]<a[i-1]){
//将a[i] 插入有序表
int temp=a[i];
//用a[i-1]取代a[i]
a[i]=a[i-1];
//再和前面数据进行对比 如果小于的话 就取代然后把数据后移
int j=i-2;
for(;j>=low&&a[j]>temp;j--)
a[j+1]=a[j];
//这个元素取代是在for循环之后 而不是在for循环里面 好好理解
a[j+1]=temp;

}
}
return a;
}
/**从大到小排列
* @return
*/
public static int[] insertSortAnother(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]>a[i-1]){
int temp=a[i];
a[i]=a[i-1];
int j=i-2;
for(;j>=low&&a[j]<temp;j--)
//一开始这个地方a[j]写成了a[i] 所以搞错了
a[j+1]=a[j];
a[j+1]=temp;
}
}
return a;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: