排序算法java实现如下:
//介绍了冒泡,快速,选择,插入以及归并5中排序算法。
public class Sort
{
public static int[] quickSort(int[] a,int begin,int end) //快速排序
{
if(begin<end)
{
int i=begin,j=end;
int vot = a[i];
if(i!=j)
{
while(i<j&&vot<=a[j])
j--;
if(i<j)
a[i++]=a[j];
while(i<j&&vot>=a[i])
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=vot;
quickSort(a,begin,i-1);
quickSort(a,i+1,end);
}
return a;
}
public static int[] maoPaoSort(int[] a) //冒泡排序
{
boolean flag = true;
for(int i=1;i<a.length&&flag;i++)
{
flag=false;
for(int j=0;j<a.length-i;j++)
{
if(a[j]>a[j+1])
{
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
}
}
return a;
}
public static int[] insertSort(int[] a) //插入排序
{
for(int i=1;i<a.length;i++)
{
int j;
for(j=i-1;j>=0;j--)
{
if(a[i]<a[j])
{
a[j+1]=a[j];
}
}
a[j+1]=a[i];
}
return a;
}
public static int[] swapSort(int[] a)//选择排序
{
for(int i=0;i<a.length-1;i++)
{
int min=i;
for(int j=i+1;j<a.length;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
if(min!=i)
{
int temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
return a;
}
public static void mergeSort(int[] a, int first, int last)
{
int mid = (first+last)/2; //获取中间位置
if(first==last)
return;
mergeSort(a,first,mid);
mergeSort(a,mid+1,last);
merge(a,first,mid,last);
}
public static void merge(int[] a, int first, int mid, int last)
{
int[] b; //临时数组
b = new int[a.length];
int i=first,j=mid+1,k=first;
while(i<=mid&&j<=last)
{
if(a[i]<=a[j])
{
b[k++]=a[i++];
}
else
{
b[k++]=a[j++];
}
}
while(i<=mid) //把剩余的添加到b中
{
b[k++]=a[i++];
}
while(j<=last)//把剩余的添加到b中
{
b[k++]=a[j++];
}
for(i=first;i<=last;i++) //把排好序的数组重新赋给a
{
a[i]=b[i];
}
}
}
时间复杂度空间复杂度如下:
其中,插入和冒泡排序在数组有顺序的情况下,会得到最好的时间复杂度。而快速排序会在数组有序情况下时间复杂度会退化成O(n2);
1,2,3,4,5,6,7例如这个数组。