1、插入排序代码:
public class InsertionSort {
public static void main(String[] args) {
int[] source = new int[]{4,2,1,6,3,6,0,-5,1,1};
int j;
for(int i=1; i <source.length; i++) {
if(source[i] < source[i-1]) {
int temp = source[i];
//与待插入数据比较扫描的同时进行后移
for(j=i-1; (j>=0 && (temp < source[j])); j--) {
source[j+1] = source[j];
}
source[j+1] = temp;
}
}
}
}
}
2、希尔排序代码:
private static void shellSort(int[] source,int d) {
int j,temp;
//希尔排序的代码只是再插入排序的基础上增加了步长d变量
for(int i=d + 1; i<source.length; i++) {
if(source[i] < source[i-d]) {
temp = source[i];
//与待插入数据比较扫描的同时进行后移
for(j=i-d; (j>=0 && temp < source[j]); j=j-d) {
source[j+d] = source[j];
}
source[j+d] = temp;
}
}
}
3、冒泡排序代码:
public class BubbleSort {
public static void main(String[] args) {
int[] source = new int[]{3,9,6,2,5,1};
for(int i=1; i<source.length; i++) {
//对当前无序区进行,从后向前扫描
for(int j=source.length-1; j>i; j--) {
if(source[j] < source[j-1]) {
int temp = source[j];
source[j] = source[j-1];
source[j-1] = temp;
}
}
}
}
}
4、快速排序代码:
public class QuickSort {
public static void main(String[] args) {
int[] s = {1,3,9,3,2,5,7,6,10,33};
QuickSort(s, 0, s.length-1);
}
private static void QuickSort(int[] source,int low,int high) {
int pivotpos;
if(low < high) {
pivotpos = partition(source,low,high);
QuickSort(source,low,pivotpos-1);
QuickSort(source,pivotpos+1,high);
}
}
private static int partition(int[] source,int low,int high) {
int i,j,x;
int pos = low;
if(low < high) {
i = low;
j = high;
x = source[i];
/*
快速排序通过两层while循环来实现,
内层循环只能确保至多从右边和左边各交换一次顺序,
外层循环确保在没有完全有序前一直进行左右间歇扫描排序
*/
while(i < j) {
/* 直到找到右边小于基准的位置,并将该值放到之前的基准位置,
该值得位置充当基准位置,但是基准值是不变的一直都是x */
while(i < j && source[j] > x) {
j--;
}
if(i < j) {
source[i] = source[j];
i++;
}
/*直到找到左边大于基准的位置,并将该值放到之前的基准位置,
该值的位置充当基准位置,但是基准值是不变的一直都是x */
while(i < j && source[i] < x) {
i++;
}
if(i < j) {
source[j] = source[i];
j--;
}
}
source[i] = x;
pos = i;
}
return pos;
}
}
5、选择排序代码:
public class SelectSort {
public static void main(String[] args) {
int[] source = new int[]{3,9,6,2,5,1};
for(int i=0; i<source.length; i++) {
//从无序区,开始与当前位置进行逐个对比
for(int j=i+1; j<source.length; j++) {
if(source[i] > source[j]) {
int temp = source[i];
source[i] = source[j];
source[j] = temp;
}
}
}
}
}