数据结构中的排序算法

上一篇介绍了冒泡排序,现在介绍一下其他的排序算法

各种排序的稳定性,时间复杂度和空间复杂度总结:

3.选择排序

 直接选择排序算法的思想比较简单:(假设数据放在一个数组a中,且数组的长度是N)

  1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置

  2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)

  3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)

  以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。

那就来个具体的例子:比如数组为{3,1,5,7,2}

1.先从整个数组中找到最小的数,即1,放到最左边所以结果为1,3,5,7,2

2.从2个位置开始,找最小的,放在1的又边1,2,3,5,7

3.继续吧.....

直接选择排序的java实现如下:

public static void selectionSort(int[] elements){

        for(int i = 0; i < elements.length-1; ++i){

            int k = i;

            for(int j = i; j < elements.length; ++j){

                if(elements[k] > elements[j]){

                    k = j;

                }

            }

            if(k != i){//交换元素

                int temp = elements[i];

                elements[i] = elements[k];

                elements[k] = temp;

            }

        }

}

时间: 2024-10-04 23:47:20

数据结构中的排序算法的相关文章

数据结构中的排序算法总结

数据结构中的排序算法 当待排序序列基本有序时优先选择简单排序,快速排序平均次数少于堆排序 1   插入排序 1)  直接插入排序 第一次将位置0和位置1进行比较,小的放前. 第二次将位置2上的数字,插入到位置0和位置1中. - 第k次将位置k上的数字,插入到第k-1次已经完成的序列中. 5 2 6 0 3 9 1 7 4 8 一趟 2 5 6 0 3 9 1 7 4 8 二趟 2 5 6 0 3 9 1 7 4 8 三趟 0 2 5 6 3 9 1 7 4 8 四趟 0 2 3 5 6 9 1

数据结构中常用排序算法

排序常用的算法有:插入算法(直接插入算法.折半插入算法.希尔算法).选择算法(简单选择算法.堆排序算法).快速算法(冒泡排序.快速排序算法) 以下程序给出了各种算法的实现,其接口为void sort(int *array,int len),每个文件实现一个算法, 最后和main.c文件编译实现. 1.直接插入算法: //direct_insert_sort.c [cpp] view plaincopy void sort(int *array,int len) { int tmp,i,j; fo

数据结构中的排序方法

冒泡排序 冒泡排序是排序算法中思想最简单的一种排序方法,通过比较相邻的两个数据,移动相邻数据中的较大者(后移).第一趟在A[0]-A[n-1]中从前往后进行两个相邻元素的比较,若后者小则交换,比较n-1次:第一趟比较结束,最大的元素确定位置,下一趟则在剩下的n-1个元素中继续上述操作.举个例子:初始序列(48,36,68,72,12,48,02),第一次比较(36,48,68,72,12,48,02),第二次比较(36,48,68,72,12,48,02),第三次比较(36,48,68,72,1

数据结构中常见经典算法

华山大师兄 排序:拓扑排序算法 字典序算法 编程珠玑:位图法排序 树:红黑树总结 B+树与B*树小结 B-树小结汇总 平衡二叉树(AVL树)小结 Trie--字典树 图的遍历:深度优先遍历与广度优先遍历 最小生成树:最小生成树-Prim算法和Kruskal算法 最短路径:最短路径—Dijkstra算法和Floyd算法

数据结构中基本查找算法总结

基本查找算法    一.查找的基本概念 查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作.查找是一种操作. 二.顺序查找 针对无序序列的一种最简单的查找方式. 时间复杂度为O(n). 三.折半查找 针对已排序序列的一种查找方式.并且只适用于顺序存储结构的序列.要求序列中的元素基本不变,在需要做删除和插入操作的时候,会影响检索效率. 时间复杂度为O(logN). 四.B树 B树又称二叉排序树(Binary Sort Tree). 1.概念:   它或者是一棵空树:或者是具有

数据结构—各类‘排序算法’实现(上)

数据结构中的排序算法分为比较排序,非比较排序.比较排序有插入排序.选择排序.交换排序.归并排序,非比较排序有计数排序.基数排序.下面是排序的具体分类: 1.直接排序 主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较 void InsertSort(int* a, size_t size) {      assert(a);      for (size_t i = 0; i < size - 1; i++)      {           int 

排序算法之交换排序

首先,上脑图. 1.为什么要学习排序算法? 这是算法学习的基础,经典的排序算法有着很广泛的用途,一遍遍的被人所使用.而且,在面试找工作的时候,数据结构中的排序算法,也是一个很重要的基本功,经常会被用人单位拿来出题目. 2.如何学习排序算法? 第一步是理解排序算法的原理,这也是最重要的一步. 第二步就是看经典的算法实现,抠细节一个个理解原理到实现经过了哪些变化. 第三部是用纸把算法实现抄一遍,这个时候会发掘出认识和实际的偏差. 第四步是把算法默写出来,这也是很重要的一步,类似于牛吃了食物之后的反刍

内部排序算法比较

一.题目描述 通过随机数据比较各排序算法的关键字比较次数和关键字移动次数,以 及执行时间,取得直观感受. 二.设计要求 一.需求分析 实现各排序算法,分别进行以下各组比较,并进行总结. 一.各算法在不同规模下的比较. 1)比较范围:直接插入排序.冒泡法排序.简单选择排序.快速排序1(自己实现).快速排序2(调用STL).归并排序. 2)比较指标:a)关键字操作次数(比较次数和移动次数之和),b)排序时间.每个指标采用多次重复取平均数记录,重复次数不小于100.注:1次关键字对换按3次移动计算.

数据结构中的7种排序算法

数据结构中的7种排序算法 排序是将一个记录的任意序列重新排列成一个按键值有序的序列. 时间复杂度主要考虑元素的移动次数. 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序. 2,时间复杂度:在最好情况下,待排序序列为正序,时间复杂度为O(n):最坏情况下,待排序序列为逆序,时间复杂度为O(n^2);平均情况下,时间复杂度为O(n^2). 3,空间复杂度:O(1). public static void insertSort(