我是靠谱客的博主 文艺滑板,最近开发中收集的这篇文章主要介绍基本排序算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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));
		}
	}


最后

以上就是文艺滑板为你收集整理的基本排序算法的全部内容,希望文章能够帮你解决基本排序算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部