您的位置:首页 > 理论基础 > 数据结构算法

视图动画学习算法和数据结构(一)(<Garry进阶(四)>)

2015-01-25 14:56 399 查看
转载请注明原出处:http://blog.csdn.net/lrs123123/article/details/43114619

这是一个写给自己复习温习的博文,不喜勿喷

一、排序板块

①冒泡排序(BubbleSort)

动画展示:



java代码:

public class BubbleSort {

	public static void main(String[] args) {
		 
        int unsortNums[] = { 3, 12, 17, 33, 2, 14, 1};
        System.out.println("\n最终结果:"+Arrays.toString(BubbleSort(unsortNums)));
	}
 
    public static int[] BubbleSort(int[] arr){
        int temp;
        for(int i=0; i < arr.length-1; i++){
 
            for(int j=1; j < arr.length-i; j++){
                if(arr[j-1] > arr[j]){
                    temp=arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j] = temp;
                }
            }
            System.out.println((i+1)+"th 排序结果: "+Arrays.toString(arr));
        }
        return arr;
    }
}


Eclipse运行结果



②选择排序(SelectSort)

动画展示:



java代码:

public class SelectSort {
	public SelectSort() {
	}; // 无参构造

	public static int[] selectSort(int[] attr) { // 返回int数组的构造

		for (int i = 0; i < attr.length - 1; i++) {
			int smallNum = i;
			for (int j = i + 1; j < attr.length; j++) {
				if (attr[j] < attr[smallNum]) {
					smallNum = j;
				}
			}
			int temp = attr[i];
			attr[i] = attr[smallNum];
			attr[smallNum] = temp;
			System.out.println((i + 1) + "th 排序结果: " + Arrays.toString(attr));
		}
		return attr;
	}

	public static void main(String[] args) {
		SelectSort selectSort = new SelectSort();
		int[] unsortNums = { 3, 12, 17, 33, 2, 14, 1 };
		System.out.println("\n最终结果:" + Arrays.toString(selectSort(unsortNums)));

	}

}


Eclipse运行结果



③插入排序(InsertionSort)

动画展示:



java代码:

public class InsertionSort {
	public static void main(String[] args) {

		int[] unsortNums = { 4, 2, 9, 6, 23, 12, 34, 0, 1 };
		insertionSort(unsortNums);
	}

	private static int [] printNumbers(int[] input) {
			for (int i = 0; i < input.length; i++) {
			}
			return input;
	}

	public static void insertionSort(int array[]) {
		int n = array.length;
		for (int j = 1; j < n; j++) {
			int key = array[j];
			int i = j - 1;
			while ((i > -1) && (array[i] > key)) {
				array[i + 1] = array[i];
				i--;
			}
			array[i + 1] = key;
			printNumbers(array);
			System.out.println("第"+(j-1) + "次排序结果: " + Arrays.toString(array));
		}
		System.out.println("\n最终结果:" + Arrays.toString(printNumbers(array)));
	}

}


Eclipse运行结果



③归并排序(MergeSort)

动画展示:



java代码:

public class MergeSort {
	private int[] array;
	private int[] tempMergArr;
	private int length;

	private void mergeParts(int lowerIndex, int middle, int higherIndex) {

		for (int i = lowerIndex; i <= higherIndex; i++) {
			tempMergArr[i] = array[i];
		}
		int i = lowerIndex;
		int j = middle + 1;
		int k = lowerIndex;
		while (i <= middle && j <= higherIndex) {
			if (tempMergArr[i] <= tempMergArr[j]) {
				array[k] = tempMergArr[i];
				i++;
			} else {
				array[k] = tempMergArr[j];
				j++;
			}
			k++;
		}
		while (i <= middle) {
			array[k] = tempMergArr[i];
			k++;
			i++;
		}
		System.out.println("第"+(j-1) + "次排序结果: " + Arrays.toString(array));
	}
	
	public static void main(String a[]) {

		int[] inputArr = { 45, 23, 11, 89, 77, 98, 4, 28, 65, 43 };
		MergeSort mms = new MergeSort();
		mms.sort(inputArr);
		for (int i : inputArr) {
		}
		System.out.println("\n最终结果:" + Arrays.toString(inputArr));
	}

	public void sort(int inputArr[]) {
		this.array = inputArr;
		this.length = inputArr.length;
		this.tempMergArr = new int[length];
		doMergeSort(0, length - 1);
	}

	private void doMergeSort(int lowerIndex, int higherIndex) {

		if (lowerIndex < higherIndex) {
			int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
			// 先排序左半部分数组
			doMergeSort(lowerIndex, middle);
			// 排序右半部分数组
			doMergeSort(middle + 1, higherIndex);
			// 合起来排序额哈哈
			mergeParts(lowerIndex, middle, higherIndex);
		}
	}

	

}


Eclipse运行结果



//2015/2/23第二次更新

动画学习算法和数据结构第二波

还有栈,数组,树,链表,队列,图,二分分配,网络流等需要以后慢慢学习,先到这 2015-2-23
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐