排序算法
发布日期:2022-02-05 04:27:54 浏览次数:1 分类:技术文章

本文共 3787 字,大约阅读时间需要 12 分钟。

排序算法

自己码的代码,亲测可以直接运行

冒泡排序

  • 原理:

比较相邻的元素。如果第一个比第二个大,就交换它们两个。

  • 算法分析

最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)

/**	 * 冒泡排序	 */	public void bobSort() {		for (int i = 0; i < length - 1; i++) {// 排序轮数			for (int j = 0; j < length - 1; j++) {// 比较次数				if (array[j] > array[j + 1]) {					int temp = array[j + 1];					array[j + 1] = array[j];					array[j] = temp;				}			}		}	}

快速排序

  • 原理:

通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

  • 算法分析

最佳情况:T(n) = O(nlogn) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(nlogn)

/**    	 * 快速排序    	 */    	public static void quickSort(int array[], int low, int high) {		    		// 1,找到递归算法的出口    		if (low > high) {    			return;    		}    		// 2, 存    		int i = low;    		int j = high;    		// 3,key    		int key = array[low];    		// 4,完成一趟排序    		while (i < j) {    			// 4.1 ,从右往左找到第一个小于key的数    			while (i < j && array[j] > key) {    				j--;    			}    			// 4.2 从左往右找到第一个大于key的数    			while (i < j && array[i] <= key) {    				i++;    			}    			// 4.3 交换    			if (i < j) {    				int p = array[i];    				array[i] = array[j];    				array[j] = p;    			}    		}    		// 4.4,调整key的位置    		int p = array[i];    		array[i] = array[low];    		array[low] = p;    		// 5, 对key左边的数快排    		quickSort(array, low, i - 1);    		// 6, 对key右边的数快排    		quickSort(array, i + 1, high);    	}

选择排序

  • 原理:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

  • 算法分析

最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)

/**	 * 选择排序	 */	public static void bubbleSort(int array[]){		int len=array.length;	    for (int i=0 ; i
array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } }

源码

package com.demo.test;public class SortTest {	private int[] array;	private int length;	/**	 * 构造函数	 * 	 * @param array	 */	public SortTest(int[] array) {		this.array = array;		this.length = array.length;	}	/**	 * 打印数组中数据	 */	public void display(int[] array) {		for (int i : array) {			System.out.print(i + " ");		}		System.out.println();	}	/**	 * 冒泡排序	 */	public void bobSort() {		for (int i = 0; i < length - 1; i++) {// 排序轮数			for (int j = 0; j < length - 1; j++) {// 比较次数				if (array[j] > array[j + 1]) {					int temp = array[j + 1];					array[j + 1] = array[j];					array[j] = temp;				}			}		}	}	/**	 * 快速排序	 */	public static void quickSort(int array[], int low, int high) {				// 1,找到递归算法的出口		if (low > high) {			return;		}		// 2, 存		int i = low;		int j = high;		// 3,key		int key = array[low];		// 4,完成一趟排序		while (i < j) {			// 4.1 ,从右往左找到第一个小于key的数			while (i < j && array[j] > key) {				j--;			}			// 4.2 从左往右找到第一个大于key的数			while (i < j && array[i] <= key) {				i++;			}			// 4.3 交换			if (i < j) {				int p = array[i];				array[i] = array[j];				array[j] = p;			}		}		// 4.4,调整key的位置		int p = array[i];		array[i] = array[low];		array[low] = p;		// 5, 对key左边的数快排		quickSort(array, low, i - 1);		// 6, 对key右边的数快排		quickSort(array, i + 1, high);	}	public static void main(String[] args) {		int[] array = { 77, 29, 28, 36, 33, 25, 10 };		SortTest bobSort = new SortTest(array);		System.out.println("冒泡排序前的数据为:");		bobSort.display(array);				bobSort.bobSort();						System.out.println("冒泡排序后的数据为:");		bobSort.display(array);				int[] array1 = { 77, 29, 28, 36, 33, 25, 10 };		SortTest bobSort1 = new SortTest(array1);		System.out.println("快速排序前的数据为:");		bobSort1.display(array1);		quickSort(array1,0,array1.length-1);		System.out.println("快速排序后的数据为:");		bobSort.display(array1);		        int[] array2 = { 78, 28, 26, 36, 33, 25, 11 };		SortTest bobSort2 = new SortTest(array2);		System.out.println("选择排序前的数据为:");		bobSort2.display(array2);		    bubbleSort(array2);					System.out.println("选择排序后的数据为:");		bobSort2.display(array2);}	}}

转载地址:https://blog.csdn.net/weixin_43287508/article/details/86716126 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:计算机网络协议
下一篇:ArrayList和LinkedList的区别

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 10时56分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章