常用的几种排序算法总结(一)

2014-11-24 09:14:50 · 作者: · 浏览: 0
[java]
package com.sort2;

import java.util.Arrays;

public class SortUtil
{
//直接查找排序
public static void insertSort(int []value)
{
int i,j,temp;
//从第二个数开始,插入前面的有序序列
for( i=1;i<=value.length-1;i++)
{
//记录将要插入的记录
temp=value[i];
//从该记录前面的一条记录开始比较,如果比前面的数小,那么不断后移
for(j=i-1;j>=0;j--)
{
//快速排序是稳定的,关键在于这里
if(temp {
value[j+1]=value[j];
}
else
break;
}
value[j+1]=temp;
}
}

//希尔排序
public static void shellSort(int[]value,int distance)
{

//依次缩小间距,shell有四次循环,由于直接插入排序对于大致有序的序列效率比较高,所以shell排序的出发点是先让序列大致有序,其本质就是插入排序
//希尔排序时不稳定的
while(distance>=1)
{
for(int i=0;i {
for(int j=i+distance;j {
int temp=value[j];
int k;
for(k=j-distance;k>=i;k-=distance)
{
if(temp value[k+distance]=value[k];
else
break;
}
value[k+distance]=temp;
}
}
if(distance==1)
{
return;
}
distance=distance/3+1;

}
}
//冒泡排序
public static void bubbleSort(int []value)
{
//
for(int i=1;i {
for(int j=0;j
{
if(value[j]>value[j+1])
{
int temp=value[j];
value[j]=value[j+1];
value[j+1]=temp;
}
}
}
}


//快速排序
public static void quickSort(int []value)
{
quickSort(value,0,value.length-1);
}

public static void quickSort(int []value,int begin,int end)
{
if(begin {
int low=begin;
int height=end;
int temp=value[low];

while(low {
while(low=temp)
{
height--;
}
if(low {
value[low++]=value[height];
}


while(low {
low++;
}
if(low {
value[height--]=value[low];
}



}

value[low]=temp;
quickSort(value,begin,low-1);
quickSort(value,low+1,end);
}



}

//选择排序
public static void selectSort(int[]value)
{
for(int i=0;i {
int min=i;
for(int j=i+1;j {