排序是CODE经常会用到的,在此做一个用JAVA实现的排序算法以供以后忘了的时候有备参考!
首先,在排序过程中,经常会对数组中两个元素进行交换,以下是交换算法:
public
static
void
swap(
int
[] array,
int
i,
int
j)
...
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
1 选择排序
选择排序其实在前面已经有一篇文章说明了,不过为了此处能讲全排序算法,再次提及.
选择排序在任何情况下都是O(n2)
public
String[] selectionSort(int[] arrayA)
...
{
for (int i = 0; i < arrayA.length - 1; i++) ...{
int minIndex = i;
// Find smallest value
for (int j = i + 1; j < arrayA.length; j++) ...{
int e1 = arrayA[j];
int e2 = arrayA[minIndex];
// Compare two value
if (e1<e2) ...{
minIndex = j;
}
}
// Swap value if necessary
if (minIndex != i)...{
swap(arrayA,minIndex,j);
}
}
return arrayA;
}
for (int i = 0; i < arrayA.length - 1; i++) ...{
int minIndex = i;
// Find smallest value
for (int j = i + 1; j < arrayA.length; j++) ...{
int e1 = arrayA[j];
int e2 = arrayA[minIndex];
// Compare two value
if (e1<e2) ...{
minIndex = j;
}
}
// Swap value if necessary
if (minIndex != i)...{
swap(arrayA,minIndex,j);
}
}
return arrayA;
}
2 冒泡排序
对于平均情况,冒泡排序的性能是O(n2)
public
static
void
bubbleSort(
int
[] array
...
{
for(int i=0;i<array.length-1;i++)...{
boolean swapped=false;
for(int j=0;j<array.length;j++)...{
if(array[j]>array[j+1])...{
swap(array,i,j+1);
swapped=tree;
}
}
if(!swapped)...{
return;
}
}
}
for(int i=0;i<array.length-1;i++)...{
boolean swapped=false;
for(int j=0;j<array.length;j++)...{
if(array[j]>array[j+1])...{
swap(array,i,j+1);
swapped=tree;
}
}
if(!swapped)...{
return;
}
}
}
3 插入排序
插入排序的最差情况性能是O(n2)
public
static
void
insertionSort(
int
[] array)
...
{
for(int i=1;i<array.length;i++)...{
int itemToInsert=array[i];
int j=i-1;
while(j>=0)...{
if(itemToInsert<array[j])...{
array[j+1]=array[j];
j--;
}
else...{
break;
}
}
array[j+1]=itemToInsert;
}
}
for(int i=1;i<array.length;i++)...{
int itemToInsert=array[i];
int j=i-1;
while(j>=0)...{
if(itemToInsert<array[j])...{
array[j+1]=array[j];
j--;
}
else...{
break;
}
}
array[j+1]=itemToInsert;
}
}
OK,就到这里了,这是常用的也是数据结构上的三种排序算法,喝杯咖啡去