选择排序:
算法分析:
(1)无论是最坏情况、最好情况和平均情况都需要找到最大值(或最小值),因此其比较次数为(n-1)+(n-2)+(n-3)+...+2+1=n(n+1)/2次;时间复杂度为O()
(2)由于选择排序是以最大值或者最小值直接与最前方未排序的键值交换,数据排列顺序很有可能被改变,因此它不是稳定排序
(3)因为需要一个额外的空间,所以空间复杂度为最佳
(3)比较适用于数据量小或者由部分数据已经排过序的情况
实现原理动态图:
/**
* @author admin $
* @title $
* @description $
* @updateTime $ 22:17$ $
* @throws $
*/
public class SelcectSort {
static int data[]=new int[]{9,7,5,3,4,6};
public static void main(String[] args) {
int smallest,temp,index;
for (int i = 0; i < 5; i++) {
smallest=data[i];
index=i;//用于标记下标 如果smallest>data[j],位置不变
for (int j = i+1; j <6 ; j++) {
if (smallest>data[j]){
smallest=data[j];
index=j;//标记下标
}
}
temp=data[index];
data[index]=data[i];
data[i]=temp;
System.out.println("第"+i+"次排序结果:");
for (int j = 0; j <6 ; j++) {
System.out.print(data[j]);
}
System.out.println();
}
}
}
运行结果
插入排序
插入排序法是将数组中的元素逐一与排好的数据进行比较,现将前两个元素排好,再排第三个元素插入适当的位置,也就是说这三个元素依然是已排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。
算法分析
(1)无论是最坏情况和平均情况都比较次数为(n-1)+(n-2)+(n-3)+...+2+1=n(n+1)/2次;时间复杂度为O()
(2)插入排序是稳定排序法
(3)因为需要一个额外的空间,所以空间复杂度为最佳
(4)这种排序法适用于大部分数据已经排过序的情况,也适用于往已排序数据库中添加新数据后再进行排序的情况
(5)由于插入排序法会造成数据的大量搬移,因此建议在链表上使用
动态图解:
import java.util.Arrays;
/**
* @author admin $
* @title $
* @description $
* @updateTime $ 22:37$ $
* @throws $
*/
public class InsertSort {
public static void main(String[] args) {
int[] array={8,4,6,7,3,5};
int i,j,temp;
for(i=1;i<array.length;i++) {
temp=array[i];
for(j=i-1;j>=0;j--) {
if (temp > array[j]) {
break;
}else{
array[j+1] = array[j];
}
}
array[j+1]=temp;
}
System.out.println(Arrays.toString(array));
}
}
运行结果: