`

数据结构之常用排序算法理解

阅读更多

1.选择排序:

遍历数组,每一次遍历找出一个最小值放在数组前面,步骤如下:

  1. 将currMin设为a[0],遍历a[1]->a[n-1],只要a[i]小于a[0],进行a[0]与a[i]的交换
  2. 将currMin设为a[1],遍历a[2]->a[n-1]
  3. 最后一个currMin为a[n-2],比较a[n-2]与a[n-1]

代码如下:

 

for(int i=0; i<arr.length -1; i++) {
    int currMin = arr[i];
    int currMinIndex = i;
    for (int j=i+1; j<arr.length; j++) {
        if(currMin > arr[j]) {
            currMin = arr[j];
            currMinIndex = j;
        }
    }
    if(currMinIndex != i) {
        list[currMinIndex] = a[i];
        a[i] = currMin;
    }
}

 

2.插入排序:

这个算法可以描述为: 将a[i]插入到已排号序的子数列中,然后a[0]->a[i]就是有序的

for(int i=1; i<arr.length; i++) {
    int currEle = arr[i];
    for (int j =i-1; j>=0&&arr[j]>currEle; j--){
        arr[j+1] = arr[j]
    }
    arr[j+1] = currEle

}

 

3.冒泡排序

遍历数组,每一次遍历后将值最大的元素交换到数组尾部,关键代码如下:

for(int out=1; out<a.lenght; out++){
    for (int in=0; in<a.length-out; in++)
        if(a[i] > a[i+1]){
            int temp = a[i];
            a[i] = a[i+1]
            a[i+1] = temp;
        }
        
}

 

4.归并排序

归并排序通过递归实现,思想非常容易理解:

public static void mergeSort(int[] list){
		if (list.length <1) {
			mergeSort(list[0->list.length/2]);
			mergeSort(list[list.length/2+1 ->list.length]);
			merge(int[firstHalfList], int[secondHalfList]);			
		}
	}
	
	public static int[] merge(int[] first, int[] second){
		int index1=0,index2=0,index3=0;
		int[] result;
		//将两个数组中的数据按大小先后存储到result中
		while(index1<first.length && index2<second.length){
			if(first[index1]<second(index2)){
				result[index3] =first[index1];
				++index1;
				++index3
			} else {
				result[index3] =second[index2];
				++index2;
				++index3
			}
			
		}
		//将剩下最大的数据,单独再追加到result表
		while (index1 <first.length) {
			result[index3++] = first[index1++];
		}
		while (index2 < second.length) {
			result[index3++] = first[index2++];
		}
	}

 

5.快速排序

快速排序跟归并排序一样采用的递归的方法实现:

public static void quickSort(int[] list){
		quickSort(list, 0, list.length-1);
		
	}
	
	public static void quickSort(int list[], int first, int last){
		if (last>first){
			int pindex = partition(list, first, last);
			quickSort(list, first, pindex-1);
			quickSort(list, pindex, last);
			
		}
	} 
  • 快速排序关键是pindex的计算,在计算pindex的时候, list[0, pindex-1]的元素都比a[pindex]小,list[pindex+1, length-1]中的元素都比a[pindex]大
  • 在进行partition的时候,数组中元素进行交换

 

0
1
分享到:
评论
1 楼 留下的祝福 2013-10-29  

快速排序和冒泡排序属于选择排序这一大类!

相关推荐

    数据结构实验-排序算法

    排序算法则是数据结构中的重要部分,它们用于对一组数据进行有序排列。在这个实验中,我们将关注六种不同的排序算法:选择排序、冒泡排序、插入排序、基数排序以及快速排序和归并排序。下面是对这些排序算法的详细...

    数据结构和常用算法大全

    本资源包“数据结构和常用算法大全”提供了丰富的实例,帮助我们深入理解这两者。 首先,我们来谈谈数据结构。常见的数据结构有数组、链表、栈、队列、树(包括二叉树、平衡树如AVL树和红黑树)、图以及哈希表等。...

    C语言数据结构内部排序算法及比较

    在计算机科学领域,数据结构和排序算法是编程基础的重要组成部分,特别是对于C语言这样底层而强大的编程工具。本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念...

    现代计算机常用数据结构和算法

    本教程“现代计算机常用数据结构和算法”旨在帮助学习者深入理解这些概念,并提升其编程能力。 数据结构主要包括数组、链表、栈、队列、树、图、哈希表等。数组是最基本的数据结构,它提供了一种方式来存储和访问...

    C语言数据结构和常用算法

    "C语言数据结构和常用算法"这个主题涵盖了编程中的基础且至关重要的概念,是任何程序员都需要掌握的核心技能。 数据结构是组织和管理数据的方式,它决定了数据在内存中的布局以及访问和操作数据的效率。在C语言中,...

    数据结构 课程设计 排序算法的比较

    数据结构课程设计是计算机科学教育中的重要组成部分,它涉及到如何高效地组织和处理数据,而排序算法则是数据结构中的一项基础但至关重要的内容。在这个课程设计中,我们重点关注了六种经典的内部排序算法:直接插入...

    常用排序算法的动态演示系统

    常用排序算法的动态演示系统 在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,...

    数据结构排序查找常用算法实现.zip

    本资源"数据结构排序查找常用算法实现.zip"提供了一系列常用排序和查找算法的实现,帮助开发者深入理解并掌握这些核心概念。以下是这些算法的详细说明: 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的交换...

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

    本资源包“数据结构-各种排序完整示例程序”提供了C语言实现的各种经典排序算法,帮助学习者深入理解并掌握这些算法的实际应用。 1. 希尔排序(Shell Sort): 希尔排序是一种基于插入排序的算法,通过将待排序数组...

    数据结构各种排序算法实现及比较

    这些算法都是数据结构课程设计报告中常用的排序算法。 简单选择排序 简单选择排序是一种简单的排序算法,其基本思想是每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列的第i个关键字。该算法...

    现代计算机常用数据结构和算法习题

    通过以上概述可以看出,《现代计算机常用数据结构和算法习题》覆盖了算法的基础知识、几种重要的排序算法以及高效的线性时间排序方法等内容。这些知识点不仅对于计算机专业的学生非常重要,也对软件开发者和其他对...

    常用排序算法java演示

    在“常用排序算法java演示”中,这些算法可能会通过图形化的方式展示其排序过程,帮助理解每一步的变化,这对于学习和教学是非常有益的。图形演示可以直观地看到数据如何在排序过程中移动,有助于加深对算法的理解。...

    排序算法(主要讲述了数据结构里面常用的一些算法)

    排序算法是数据结构中不可或缺的一部分,它用于组织和优化数据,使得数据按照特定的顺序排列。在处理大量数据时,高效的排序算法显得尤为重要,因为它们直接影响到程序的运行时间和资源消耗。本文将深入探讨几种常见...

    数据结构算法常用算法动画讲解

    在这个"数据结构算法常用算法动画讲解"资源中,包含了45个动画文件,旨在通过动态的视觉展示,帮助学习者直观地理解各种核心算法的实现过程。这些动画涵盖了从基础到高级的数据结构和算法,使得抽象的概念变得生动...

    C++数据结构知识点与经典算法整理

    - **目标**:学习数据结构的目标在于熟悉常用的数据结构类型,理解其内在逻辑关系,掌握在计算机中的存储表示方法,并通过具体案例了解它们的操作算法,进而提高软件设计与编程能力。 2. **数据结构概述**: - **...

    各种排序算法与数据结构的一些源码

    在编程领域,数据结构和排序算法是至关重要的基础概念,它们是解决问题和设计高效程序的核心。数据结构可以被看作是存储和组织数据的方式,而排序算法则是对这些数据进行有秩序排列的方法。这里我们将深入探讨这两种...

    数据结构课程设计(C++代码+报告)--各种排序算法时间性能的比较

    总之,这个课程设计深入探讨了排序算法的原理、实现和性能比较,对于理解数据结构和算法有着重要的实践意义。通过这样的实践,学生不仅能掌握排序算法的基本知识,还能提升编程和问题解决的能力。

    数据结构与常用算法

    数据结构与常用算法是计算机科学中的核心概念,它们在编程和软件开发中起着至关重要的作用。...深入理解数据结构与常用算法,不仅能够编写出高效代码,还能提高问题解决能力,是成为一名优秀程序员的必备技能。

    数据结构排序常用算法实现.zip

    这个压缩包“数据结构排序常用算法实现.zip”显然包含了多种经典的排序算法的实现,包括冒泡排序、插入排序、选择排序、希尔排序、快速排序以及堆排序。下面我们将逐一探讨这些算法的核心原理和应用场景。 1. **...

Global site tag (gtag.js) - Google Analytics