冒泡排序
public static void bubbleSort(int a[]){ int temp; for (int i = 0; i <=a.length ; i++) { for (int j = i+1; j < a.length; j++) { if (a[i]>a[j]){ temp=a[i]; a[i]=a[j]; a[j]=temp; } } } }
插入排序
public static void insertSort(int a[]){ for (int i=1;i<a.length;i++){ if (a[i]<a[i-1]){//若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入 int j=i-1; int x=a[i];//复制为哨兵,即存储待排序元素 a[i]=a[i-1];//后移一个元素 while (j>=0&&x<a[j]){//查找在有序表的插入位置 a[j+1]=a[j]; j--;//元素后移 } a[j+1] = x;//插入到正确位置 } } }
选择排序
public static void selectSort(int a[]){ int key,temp; for (int i = 0; i <a.length ; i++) { key=selectMinKey(a,i); if (key!=i){ temp=a[i]; a[i]=a[key]; a[key]=temp; } } } public static int selectMinKey(int a[],int i){ int key=i; for (int j = i+1; j <a.length ; j++) { if (a[key]>a[j]){ key=j; } } return key; }
希尔排序
public static void ShellInsertSort(int a[],int dk){ for (int i = dk; i <a.length ; i++) { if(a[i] < a[i-dk]){ //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入 int j = i-dk; int x = a[i]; //复制为哨兵,即存储待排序元素 a[i] = a[i-dk]; //首先后移一个元素 while(j>0&&x < a[j]){ //查找在有序表的插入位置 a[j+dk] = a[j]; j -= dk; //元素后移 } a[j+dk] = x; //插入到正确位置 } } } public static void shellSort(int a[],int n){//n为增量,当n为1时,整个数组就是一个表项序列 int dk = n/2; while( dk >= 1 ){ ShellInsertSort(a,dk); dk = dk/2; } }