前段时间回顾了下基本的排序算法,然后根据算法描述用java语言来实现了几个简单的算法,下面总结一下:
基本排序算法:
首先先介绍几种简单的排序算法
1.冒泡排序
冒泡排序法,如名字所述,每次找出最大(最小)的数,像泡泡一样往上冒,直到最后一个数,这样就能排序完成。
如果有n个数,那么需要进行循环的次数便为n*(n+1)/2,时间复杂度为o(n^2).
下面是简要代码:
public static void sortAsc(int[] tem) {
int i = 0;
int j = 0;
int t = 0;
for (i = tem.length; i > 0; i--) {
for (j = 0; j < i - 1; j++) {
if (tem[j] > tem[j + 1]) {
t = tem[j + 1];
tem[j + 1] = tem[j];
tem[j] = t;
}
}
for (int k : tem) {
System.out.print(k + " ");
}
System.out.println("");
}
}
2.选择排序法:
选择排序,从第一个数开始,每次选择剩下的数中最大(小)的数进行交互位置,直到最后一个数。
如果有n个数,那么需要进行交互位置的次数便为n*(n+1)/2,时间复杂度为o(n^2).
下面是简要代码:
public static void sortAsc(int[] tem){
int i =0;
int j=0;
int temindex =0;
int t=0;
for (i=0;i<tem.length;i++){
temindex =i;
for (j = i+1; j <tem.length ; j++) {
if(tem[j]<tem[temindex]){
temindex=j;
}
}
t= tem[i];
tem[i] = tem[temindex];
tem[temindex] = t;
for (int k : tem) {
System.out.print(k + " ");
}
System.out.println("");
}
}
3.插入排序
插入排序,在第二个数后,在已排好序中的数列中查找应该要插入的位置,然后进行位置挪移,不断形成新的有序数列直到最后一个数。
如果有n个数,则需要进行排序的次数便为n*n/2,时间复杂度为o(n^2)
简要代码如下:
public static void sortAsc(int[] tem){
int i;
int j;
int t;
for ( i = 0; i <tem.length-1; i++) {
t = tem[i+1];
for (j = i; j >=0; j--) {
if(t>tem[j]){
break;
}
tem[j+1]=tem[j];
}
tem[j+1] = t;
for (int k : tem) {
System.out.print(k + " ");
}
System.out.println("");
}
}
最后总结一下,这三种排序算法思路都比较简单,因此时间复杂度其实算比较高的,在性能要求比较高的场景中应用并不算特别多。但是入门非常容易。