`
dalongJDK
  • 浏览: 16006 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

数据结构中五种简单的排序

阅读更多
    今天复习了一下数据结构的排序(插入、冒泡、快速、选择、归并),现在备份、备份。
/**
	 * 插入排序 
	 * 原理: 
	 * 1:将某一元素在一有序队列中找到合适的位置 
	 * 2:将该位置后面的元素分别后移一位 
	 * 3:将该元素复制到合适的位置
	 */
	public void InsertSort(int[] insertList) {
		int j = 0, temp;
		for (int i = 1; i < insertList.length; i++) {
			if (insertList[i] < insertList[i - 1]) {
				temp = insertList[i];
				insertList[i] = insertList[i - 1];
				for (j = i - 1; j > 0; j--) {
					if (insertList[j] > temp) {
						insertList[j] = insertList[j - 1];
					} else {
						break;
					}
				}
				insertList[j] = temp;
			}
		}
	}

/**
	 * 冒泡排序 
      *原理: 将第一个元素与第二个元素进行比较,若为逆序则交换,
	 * 再将第二个 元素与第三个元素进行比较,若为逆序则交换,依次类推为冒泡排序。
	 */
	public void maoPao(int[] maoPaoList) {
		int temp, total = maoPaoList.length;
		for (int i = 0; i < total - 1; i++) {
			for (int j = 0; j < total - 1 - i; j++) {
				if (maoPaoList[j] > maoPaoList[j + 1]) {
					temp = maoPaoList[j + 1];
					maoPaoList[j + 1] = maoPaoList[j];
					maoPaoList[j] = temp;
				}
			}
		}
	}

/**
	 * 快速排序
	 * 原理:
	 * 在无序列表中选定一个支点元素,将比该元素小的元素放到左边,
	 * 大的元素放到右边,把该元素左右两个子序列执行以上操作记得到有序表
	 * 
	 */
	private static int[] quickList = { 5, 3, 6, 2, 7, 1, 9, 54, 23, 1, 3, 5, 7 };

	public void quickSort(int low, int high) {
		if (low < high) {
			int pivotdoc = partition(low, high);
			quickSort(low, pivotdoc - 1);
			quickSort(pivotdoc + 1, high);
		}
	}

	public int partition(int low, int high) {
		int pivot = quickList[low];
		quickList[0] = quickList[low];
		while (low < high) {
			while (low < high && quickList[high] >= pivot)
				high--;
			quickList[low] = quickList[high];
			while (low < high && quickList[low] <= pivot)
				low++;
			quickList[high] = quickList[low];
		}
		quickList[low] = quickList[0];
		return low;
	}

/**
	 *选择排序
	 *原理: 
	 *第一个元素与后面的元素依次比较,如果为逆序则交换,依次类推为选择排序
	 * 
	 */
	public void selectSort(int[] selectList) {
		int count, temp;
		for (int i = 0; i < selectList.length; i++) {
			count = i;
			for (int j = i + 1; j < selectList.length; j++) {
				if (selectList[count] > selectList[j]) {
					count = j;
				}
			}
			temp = selectList[count];
			selectList[count] = selectList[i];
			selectList[i] = temp;
		}
	}

	/**
	 * 归并排序
	 * 原理:
	 * 将两个或两个有序表合成一个新的有序表
	 * 
	 */
	public int[] mergeSort(int[] mergeList, int low, int high) {
		int[] mergeCopy = new int[high + 1];
		if (low == high) {
			mergeCopy[low] = mergeList[high];
		} else {
			int mid = (low + high) / 2;
			int[] sqList1 = new int[high + 1];
			int[] sqList2 = new int[high + 1];
			int[] sqList = new int[high + 1];
			sqList1 = mergeSort(mergeList, low, mid);
			sqList2 = mergeSort(mergeList, mid + 1, high);
			int m = low, n = mid + 1;
			while (m <= mid) {
				sqList[m] = sqList1[m];
				m++;
			}
			while (n <= high) {
				sqList[n] = sqList2[n];
				n++;
			}
			mergeCopy = merge(sqList, low, mid, high);
		}
		return mergeCopy;
	}

	public int[] merge(int[] sqList, int low, int mid, int high) {
		int[] mergeList = new int[high + 1];
		int i, j, k = low;
		for (i = low, j = mid + 1; i <= mid && j <= high;) {
			if (sqList[i] < sqList[j]) {
				mergeList[k] = sqList[i];
				k++;
				i++;
			} else {
				mergeList[k] = sqList[j];
				k++;
				j++;
			}
		}
		while (i <= mid) {
			mergeList[k] = sqList[i];
			k++;
			i++;
		}
		while (j <= high) {
			mergeList[k] = sqList[j];
			k++;
			j++;
		}
		return mergeList;
	}
分享到:
评论

相关推荐

    数据结构--五种排序

    辛运帏老师的五种排序代码可能涵盖了这些算法的实现细节,包括不同的优化策略,如快速排序中的三数取中法来选取基准,或者在插入排序中使用二分查找降低插入操作的复杂性。学习这些代码可以帮助深入理解每种排序算法...

    数据结构5种经典排序算法

    以下是关于标题“数据结构5种经典排序算法”和描述中提到的五种排序算法的详细解释,以及它们在实际应用中的重要性。 1. **简单排序**(直接插入排序): 直接插入排序是一种简单的排序算法,它的工作原理类似于...

    数据结构中五种最基本的排序算法,包括插入,选择,希尔,快速,冒泡排序

    在IT领域,排序算法是计算机科学中的核心概念,特别是在数据结构和算法分析中。本文将深入探讨五种基本的排序算法:插入排序、选择排序、希尔排序、快速排序以及冒泡排序,它们都是以C++语言实现的。此外,我们还将...

    几种内排序的方法 数据结构报告c++代码

    在这个数据结构报告中,我们将深入探讨七种不同的内排序算法:简单选择排序、冒泡排序、插入排序、快速排序、两路合并排序以及堆排序。这些排序算法在C++语言环境下进行了实现,并且包含了详细的源代码和实验报告,...

    数据结构课程设计(内部排序算法比较_C语言)

    排序作为数据结构中的重要组成部分,在实际开发中具有广泛的应用场景。理解不同排序算法的特点及其适用场景,对于提高程序效率和解决问题至关重要。本课题旨在通过比较各种内部排序算法的性能,帮助开发者在实际应用...

    数据结构8中算法排序,配源码和动画演示.rar

    6. 堆排序(Heap Sort):堆是一种特殊的树形数据结构,堆排序利用大顶堆或小顶堆的性质进行排序。它在原地排序,时间复杂度为O(n log n)。 7. 计数排序(Counting Sort):非基于比较的排序算法,适用于整数范围...

    数据结构-各种排序完整示例程序

    在计算机科学领域,数据结构和排序算法是至关重要的基础,它们直接影响到程序的效率和性能。本资源包“数据结构-各种排序完整示例程序”提供了C语言实现的各种经典排序算法,帮助学习者深入理解并掌握这些算法的实际...

    数据结构的几种排序代码

    在数据结构的学习中,排序算法是一项基础且重要的技能。本篇将重点介绍两种经典的排序算法:箱子排序(Bucket Sort)和冒泡排序(Bubble Sort),这些都是在实际编程中常见的排序方法。 首先,我们来看箱子排序。这...

    数据结构课程设计——五种排序详细代码

    在这个课程设计中,学生需要实现五种不同的排序算法,包括冒泡排序、直接插入排序、简单选择排序、快速排序和希尔排序。这些排序算法在计算机科学中具有广泛的应用,它们各自有不同的效率和适用场景。 1. 冒泡排序...

    数据结构常见排序的几种方法

    本程序涵盖了数据结构中常见的几种排序方法,下面将对这些排序算法进行详细介绍。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一。它通过不断比较相邻元素并交换位置来实现排序,重复这一过程,直到...

    数据结构几种排序源码

    起泡排序 直接插入排序 简单选择排序 快速排序 希尔排序 堆排序

    数据结构中的查找和排序C语言实现代码

    查找和排序是数据结构中两个至关重要的概念,它们在编程中扮演着核心角色,尤其是在处理大量数据时。本文将深入探讨这两个概念以及它们在C语言中的实现。 查找是指在数据集合中寻找特定元素的过程。常见的查找算法...

    数据结构 各种排序算法

    在每一轮排序中,它将元素按照增量分组进行插入排序,然后逐渐减小增量,直到增量为1,此时执行最后一次插入排序,使整个序列有序。希尔排序的时间复杂度通常比直接插入排序要好,但不如其他高级排序算法。 3. 快速...

    数据结构实验中所有排序算法

    本篇将深入探讨数据结构实验中常见的几种排序算法,包括插入排序、冒泡排序、选择排序以及快速排序,通过分析它们的工作原理、时间复杂度以及应用场景,帮助读者全面理解这些算法。 ### 一、插入排序(Insertion ...

    数据结构试验 排序问题 C语言 源代码

    在实验6-6.6排序中,可能包含了对上述一种或多种排序算法的实现。通过编写源代码,我们可以深入理解这些排序算法的工作原理,进一步提升编程能力和算法设计能力。源代码分析和调试是学习过程中极其重要的一环,能够...

    数据结构算法源代码(插入排序和选择排序)

    这两种排序算法在数据结构和算法的学习中占据着核心地位,因为它们帮助初学者理解排序的基本原理。 首先,我们来看**插入排序(Insertion Sort)**。插入排序是一种简单直观的排序算法,它的工作方式类似于人们整理...

    数据结构(严蔚敏)第十章:内部排序

    数据结构是计算机科学中的核心课程之一,而内部排序则是数据结构中的重要组成部分,它涉及到如何高效地对大量数据进行排序。严蔚敏教授的《数据结构》是一本经典的教材,其中第十章专门讲解了内部排序算法。内部排序...

    数据结构中的排序问题

    在计算机科学和信息技术领域,排序算法是数据结构中必不可少的部分,广泛应用于数据库管理、文件系统、数据分析等多个场景。 1. **排序的概念** - 排序,即对一组记录或数据元素按照某个关键字进行升序或降序的...

    数据结构排序实验报告

    ### 数据结构排序实验报告知识点解析 #### 实验背景与目的 - **实验背景**:本实验报告来源于南昌大学科学技术学院信息学科部计算机系的一次专业课程实验。《数据结构》作为一门重要的计算机基础课程,其目的在于...

Global site tag (gtag.js) - Google Analytics