在本篇章中不阐释原理,仅阐述使用java语言实现。
1.冒泡排序(时间复杂度:O(N^2);稳定):
public class sort00 {
public static void sort(Comparable[] a){
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(greater(a[j],a[j+1])){
exch(a,j,j+1);
}
}
}
}
private static void exch(Comparable[] a, int i, int j) {
Comparable temp=a[i];
a[i]=a[j];
a[j]=temp;
}
private static boolean greater(Comparable a, Comparable b) {
return a.compareTo(b)>0;
}
}
2.选择排序:(时间复杂度:O(N^2);不稳定):
public class sort01 {
public static void sort(Comparable[] a){
for (int i = 0; i <a.length-1 ; i++) {
int minindex=i;
for(int j=i+1;j<a.length;j++){
if(greater(a[minindex],a[j])){
minindex=j;
}
}
exch(a,i,minindex);
}
}
private static void exch(Comparable[] a, int i, int j) {
Comparable temp=a[i];
a[i]=a[j];
a[j]=temp;
}
private static boolean greater(Comparable a, Comparable b) {
return a.compareTo(b)>0;
}
}
3.插入排序:(时间复杂度:O(N^2);稳定)
public class sort02 {
public static void sort(Comparable[] a){
for (int i = 0; i < a.length - 1; i++) {
for (int j = i; j >=0 ; j--) {
if(geater(a[j],a[j+1])){
exch(a,j,j+1);
}
}
}
}
private static void exch(Comparable[] a,int i,int j){
Comparable temp=a[i];
a[i]=a[j];
a[j]=temp;
}
private static boolean geater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
}
4.希尔排序(不稳定)
public class sort03 {
public static void sort(Comparable[] a){
//1.由数组a的长度确定增长量h的初始值
int h=1;
while (h<a.length/2){
h=2*h+1;
}
//2.希尔排序
while (h>=1){
//排序
//找到待插入的元素
for (int i = h; i < a.length; i++) {
//把待插入的元素插入到有序数列中
for (int j = i; j >=h ; j-=h) {
//带插入元素是a[j],比较a[j]和a[j-h]
if(geater(a[j-h],a[j])){
//交换元素
exch(a,j-h,j);
}else {
//待插入元素已经找到了合适的位置,结束循环
break;
}
}
}
//减小h的值
h=h/2;
}
}
private static void exch(Comparable[] a,int i,int j){
Comparable temp=a[i];
a[i]=a[j];
a[j]=temp;
}
private static boolean geater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
}