题目:用java编写一段程序采用选择排序法对数组array = {25,15,42,16,12,36}进行由小到大排序。
1、选择排序法
该排序法的思想是每次从当前元素开始往后查找最小元素,将最小与当前元素进行位置互换。选择排序和冒泡排序相比优势在于交换次数减少。
// 时间复杂度n(n-1)/2,即O(n^2)
public static void selectSort(int[] array){
int k,tmp,len;
len=array.length;
for(int i=0;i<len;i++){
k=i;
for(int j=i+1;j<len;j++){
if(array[j]<array[k]){
k=j;
}
}
if(k!=i){
tmp=array[i];
array[i]=array[k];
array[k]=tmp;
}
}
}
2、冒泡排序法
该排序法的思想是每一轮排序都是将相邻两个元素做比较,经过n轮比较,值小的元素逐渐前移,就像水底的泡泡不断上浮一样。
// 时间复杂度n(n-1)/2,即O(n^2)
public static void bubbleSort(int[] array) {
int tmp;
if(array.length<2){
return;
}
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
tmp = array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
3、快速排序法
快速排序法的思想是选中一个元素(一般选取第一个元素),将后面的元素跟该基元进行比较,比基元小的放一堆,比基元大的放另一堆,然后将基元放到两堆元素之间,再对基元两边的元素进行递归调用。该算法的时间复杂度最坏情况是O(n^2),理想情况是O(nlog2n)
// SUN的JDK中的Arrays.sort 方法用的就是快排。最坏情况n^2,最佳情况nlog2n
private static void quickSort(int[] array,int start,int end)
{
if(start<end)
{
// 基元
int midElement=array[start];
// i指向起始位置
int i=start;
// 遍历基元后的所有元素,如果比基元小则将此元素和i+1处的元素调换位置
for(int j=start+1;j<=end;j++){
if(array[j]<midElement)
{
int temp=array[j];
array[j]=array[i+1];
array[i+1]=temp;
i++;
}
}
// 此时从基元的下一个元素开始到i指向的位置的元素都是比基元小,而从i指向的位置往后的所有元素都比基元大
// 交换i处元素和基元
array[start]=array[i];
array[i]=midElement;
// 递归调用
quickSort(array, start, i-1);
quickSort(array, i+1, end);
}
}