排序 一些基本的排序

*/-->

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

排序 一些基本的排序

约定:在代码中 l,和 r 都是闭区间,例如,有 10 个元素的数组,那么我的代码中 l 和 r 分别是 0 和 9。(使用的是从小到大排序)

冒泡排序
假如有 n 个元素,那我们要走 n-1 次,选择出一个最大,然后丢到后面去。

void bubble(int l, int r) {
     for(int i = l; i <= r-1; i++) {      // n - 1 次
        for(int j = l; j < r-i; j++) {    // 因为 r-i 后面的值都是已经被丢过(排好序)
            if(a[j] > a[j+1]) {
                swap(a, j, j+1);          // 发现大的就开始往后面丢
            }
        }
    }
}

选择排序
和冒泡排序不同的是,选择排序一开是先先选择出最小的,然后开始放到前面。我们要找出一个数组中的最小值。

int min = a[0];
for (int i = 1; i < n; i++) {
    if (a[i] > min) {
        min = a[i];
    }
}

现在我们只需要找到最小值的下标。

int min = 0;
for (int i = 1; i < n; i++) {
    if (a[i] > a[min]) {
        min = i;
    }
}

下面就是选择排序的代码。

void select_sort(int l, int r) {
    for (int i = l; i <= r-1; ++i) {
        int min = i;
        for (int j = i+1; j <= r; ++j) {
            if (a[j] < a[k]) {
                min = j;
            }
        }
        swap(a, k, i);
    }
}

插入排序
插入排序就好像是我们玩扑克牌时候的排序,我们摸到一张牌,那我们就要从右边开始往左边插,(这里假设你是用左手拿着一堆牌,如果你是右手那反过来)。

首先,假设这张牌的大小为 key 且他的下标是 i,那么他要从 i-1 比到 0。j 从 i-1 到 0。如果有比他大的牌,把这张牌的向后推,从 j 推向(j+1)。如果这张牌(j)小于 key,那我们 key 的牌就要放在 j 的后面,也就是 j+1 = key。

void insert_sort(int l, int r) {
    for(int i = l+1; i <= r; i++) {
        int key = a[i];
        int j = i - 1;
        while(j >= 0 && a[j] > key) {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = key;
    }
}
时间: 2024-10-19 11:25:04

排序 一些基本的排序的相关文章

C++ STL中Map的按Key排序和按Value排序

原文  http://blog.csdn.net/iicy266/article/details/11906189 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学

排序算法之希尔排序

文章转载自http://www.cnblogs.com/chengxiao/ 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组

排序的概念(选择排序1)

                                     排序(比较与交换) 排序的稳定性:     排序之前,R[i]在R[j]前面,排序后,R[i]还在R[j]前面,则这个排序方法是稳定的.否则这个排序  方法是不稳定的.  外排序:----依赖--->内排序      待排序的数据元素数量很大,整个序列的排序过程不可能在内存中完成.  内排序:      整个排序过程不需要访问外存便能完成.                                       排序的

HashMap按键排序和按值排序

一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度.HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null.非同步的. T

最快最简单的排序算法:桶排序

在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个同学分别考了5分.3分.5分.2分和8分,哎考的真是惨不忍睹(满分是10分).接下来将分数进行从大到小排序,排序后是8

插入排序 | 冒泡排序 | 希尔排序 | 堆排序 | 快速排序 | 选择排序 | 归并排序

以下是最近学习各种算法的代码实现: #include <stdlib.h> #include <stdio.h> #include <time.h> #include <limits.h> typedef int EleType; typedef int (*CompFunc)(void *,void *); int IntComp(void * a,void *b) { if(*(int *)a > *(int *)b) return 1; if(*

经典排序算法--简单选择排序

算法简介 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 白话理解 依然已排队为例,在排队时,有的老师可能会选择这样排序,先在一列中选出最矮的,放在第一位,然后选出第二矮的,放在第二位.队伍完成排序.而这就是选择排序的思想. 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素: (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换: (3)从余下的 N - 1 个元素中,找出关键字最小

数据结构排序算法之希尔排序

希尔排序又叫做递减增量排序.在这种排序中,我们将设置一个步长(增量),我们在比较数据时根据增量去进行比较,这样我们的数据会一次性前进很多步,所以希尔排序的效率要比直接插入排序的效率高. 希尔排序的思想就是我们设置一个步长,然后我们根据这个步长进行划分子序列,得到子序列1,子序列2....,然后我们对每个子序列进行直接插入排序,我们也知道当整个数列基本有序的时候使用直接插入排序的效率是非常高的.然后我们缩小步长,则我们划分的子序列的个数越来越少,我们每个子序列中的数据越来越多,则我们基本有序的数据

排序算法之快速选择排序

---恢复内容开始--- 接算法的上一系列,在前几篇博客中,已经分析了 交换算法(冒泡排序,快速排序).插入算法(直接插入排序,希尔排序),这一系列我们谈谈选择排序. 选择排序分为两种,一种是直接选择排序,一种是堆排序,下面我们看 直接选择排序: 百度百科: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法 (比如序列[5, 5