概述
1. 插入排序法
/**
* 插入排序法
* @param a
*/
static void insertionSort( ArrayList<Integer> a){
int j;
for( int p = 1; p < a.size(); p++ ){
Integer tmp = a.get(p);
for( j = p; j > 0 && tmp.compareTo(a.get(j - 1)) < 0; j-- ) {
System.out.println("change " + a.get(j) + " " + a.get(j - 1));
a.set(j, a.get(j - 1));
}
a.set(j, tmp);
System.out.println(" p = " + p + " change " + a.get(j) + " " + tmp);
}
}
2. 希尔排序法
/**
* 希尔排序
* @param a
*/
static void shellSort( ArrayList<Integer> a ){
int j;
for( int gap = a.size() / 2; gap > 0; gap /= 2 ){
for( int i = gap; i < a.size(); i++ ){
Integer tmp = a.get(i);
for( j = i; j >= gap && tmp.compareTo(a.get(j - gap)) < 0; j-=gap ){
System.out.println("change " + a.get(j) + " " + a.get(j - gap));
a.set(j, a.get(j - gap));
}
System.out.println(" i = " + i + " change " + a.get(j) + " " + tmp);
a.set(j, tmp);
}
System.out.println(" gap = " + gap);
}
}
3. 归并排序
/**
* 归并排序
* @param a
* @param tmpArray
* @param left
* @param right
*/
static void mergeSort( ArrayList<Integer> a, ArrayList<Integer> tmpArray, int left, int right ){
if( left < right ){
int center = ( left + right ) / 2;
mergeSort(a, tmpArray, left, center);
mergeSort(a, tmpArray, center + 1, right);
merge(a, tmpArray, left, center + 1, right);
}
}
static void merge( ArrayList<Integer> a, ArrayList<Integer> tmpArray, int leftPos, int rightPos, int rightEnd ){
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;
while( leftPos <= leftEnd && rightPos <= rightEnd ){
if( a.get(leftPos).compareTo(a.get(rightPos)) <= 0 ){
tmpArray.set(tmpPos++, a.get(leftPos++));
}
else{
tmpArray.set(tmpPos++, a.get(rightPos++));
}
}
while( leftPos <= leftEnd ){
tmpArray.set(tmpPos++, a.get(leftPos++));
}
while( rightPos <= rightEnd ){
tmpArray.set(tmpPos++, a.get(rightPos++));
}
for( int i = 0; i < numElements; i++, rightEnd--){
a.set(rightEnd, tmpArray.get(rightEnd));
}
}
最后
以上就是文艺滑板为你收集整理的基本排序算法的全部内容,希望文章能够帮你解决基本排序算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复