java排序(汇总)

来源:互联网 发布:刀锋铁骑高级书数据 编辑:程序博客网 时间:2024/05/18 02:32

交换排序

public class Maopao {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={1,89,23,2,3,10,30,100};
for(int i=0;i<a.length;i++)
{
for(int j=i+1;j<a.length;j++)
{
if(a[i]<a[j])
{
a[i]=a[j]+a[i];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];//不需要存储空间
}
}
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}


冒泡排序


private static void UpSort(int[] a) {
// TODO Auto-generated method stub
boolean flag=true;//冒泡改进
for(int i=0;i<a.length && flag;i++)
{
flag=false;
for(int j=0;j<a.length-i-1;j++)
{
if(a[j]>a[j+1])
{
flag=true;
a[j]=a[j]+a[j+1];
a[j+1]=a[j]-a[j+1];
a[j]=a[j]-a[j+1];
}

        
}

if(!flag)

{

break;

}
}

}


改进的冒泡排序 快速排序

public class KuaiSuPaiXu {


public static void main(String[] args) {
int a[] = { 1, 89, 23, 2, 3, 10, 30, 100 ,1000,200,5,7,1000,300};
// System.out.println(a.length);
QuickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}


private static void QuickSort(int[] a, int low, int high) {
int l = low;
int h = high;

int key = a[low];

while(l<h)
{
//比key小得放前面
while(key<a[h] && l<h){h--;}
if(l<h)
{
/*int temp=a[h];
a[h]=a[l];
a[l]=temp;
l++;*/
a[l++]=a[h];
}
//比key大的放后面
while(key>a[l] && l<h){l++;}
if(l<h)
{
/*int temp=a[h];
a[h]=a[l];
a[l]=temp;
h--;*/
a[h--]=a[l];
}
}
a[l]=key;//存储空间nlogn
if(l>low){QuickSort(a,low,l-1);}
if(h<high){QuickSort(a,l+1,high);}
}
}


选择排序  选择最小或最大的放到最后

public class Xuanze {
public static void main(String[] args) {
int a[]={1,89,23,2,3,10,30,100};
int minIndex=0;//标志符,最小标志符
for(int i=0;i<a.length;i++)
{
minIndex=i;
for(int j=i+1;j<a.length;j++)
{
if(a[minIndex]>a[j])
{
minIndex=j;
}
}
if(minIndex!=i)
{
//说明有比a[i]还小得数,则交换之
a[minIndex]=a[minIndex]+a[i];
a[i]=a[minIndex]-a[i];
a[minIndex]=a[minIndex]-a[i];
}
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}

希尔排序


public class Test {


public static void main(String[] args) {
int a[]={1,0,90,123,23,1,5,-1,-10};
shellSort(a);
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}


private static void shellSort(int[] a) {
// TODO Auto-generated method stub
int startc = 0;//比较数字的起始下标
int distance=a.length/2;//增量下标大于0;
int temp;//暂存数据
int j;//遍历数据
while(distance!=0)
{
System.out.println("distace="+ distance);
for(j=distance;j<a.length;j++)
{
temp=a[j];
startc=j-distance;
System.out.println("startc+"+startc);
while(temp<a[startc]&& startc<a.length && startc>=0)
{
a[startc+distance]=a[startc];
startc=startc-distance;
if(startc<0 || startc>a.length)
{
break;
}
}
              a[startc+distance]=temp;
}
distance=distance/2;
}
}
}

直接插入排序

public class InsertSort {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
      int a[]={1,23,0,4,25,18,0,36,11,10,5};
      for(int i=1;i<a.length;i++)
      {
    for(int j=i;j>0 && a[j-1]>a[j];j--)
    {
    swap(a,j-1,j);
    }
      }
      
      for(int i=0;i<a.length;i++)
      {
     System.out.print(a[i]+" ");
      }
}


private static void swap(int[] a, int i, int j) {
// TODO Auto-generated method stub
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}


}


归并排序




public class MergeSort1 {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = { 1, 89, 23, 2, 3, 10, 30, 100, 1000, 200, 300, 300 };
MergeSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}


}


public static void MergeSort(int[] a, int start, int end) {


if (start < end) {
int midd = (start + end) / 2;
MergeSort(a, start, midd);
MergeSort(a, midd + 1, end);
Merge(a, start, midd, midd + 1, end);
// 多路归并


/*
* int midd1=(start+end)/4; MergeSort(a,start,midd1);
* MergeSort(a,midd1+1,midd1*2); MergeSort(a,midd1*2+1,midd1*3);
* MergeSort(a,midd1*3+1,end); Merge(a,start,midd1,midd1+1,midd1*2);
* Merge(a,midd1*2+1,midd1*3,midd1*3+1,end);
* Merge(a,start,midd1*2,midd1*2+1,end);
*/


}


}


public static void Merge(int[] a, int start1, int end1, int start2, int end2) {
int i, j;
i = start1;
j = start2;
int[] temp = new int[end2 - start1 + 1];
int k = 0;
while (i <= end1 && j <= end2) {
if (a[i] > a[j]) {
temp[k++] = a[j++];
} else {
temp[k++] = a[i++];
}
}
while (i <= end1) {
temp[k++] = a[i++];


}
while (j <= end2) {
temp[k++] = a[j++];
}
k = start1;
for (int element : temp) {
a[k++] = element;
System.out.print(element + " ");
}
System.out.println();


}


}

0 0
原创粉丝点击