`
steven-zhou
  • 浏览: 212391 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

荷兰国旗排序

阅读更多
有一整型一维数组,要求在时间复杂度为O(N)的情况下,把小于零的数置于数组的前面,大于零的数放置于数组后面。
void holandflag_sort(int a[], int size)
{
    int i, j, k;

    i = 0;
    j = 0;
    k = size - 1;

    while (j < k)
        switch (a[j]) {
        case RED:
            swap(a, i, j);
            i++;
            j++;
            break;
        case WHITE:
            j++;
            break;
        case BLUE:
            swap(a, j, k);
            k--;
            break;
        }
}

static inline void swap(int a[], int pa, int pb)
{
    int tmp;
    tmp = a[pa];
    a[pa] = a[pb];
    a[pb] = tmp;
}

分享到:
评论

相关推荐

    python 实现 排序 课程设计 代码

    荷兰国旗排序(Dutch National Flag Sort) 交换排序(Exchange Sort) 外部排序(External Sort) 侏儒排序(Gnome Sort) 堆排序(Heap Sort) 插入排序(Insertion Sort) 引入排序(Intro Sort) 迭代归并排序...

    荷兰国旗问题

    解决荷兰国旗问题的经典算法通常基于快速排序的思路,但针对此问题进行了优化。快速排序的随机化版本在最坏情况下具有O(n log n)的时间复杂度,但在处理荷兰国旗问题时,由于我们只关心特定值的划分,可以进一步优化...

    计算机科学导论课程设计 1. 荷兰国旗问题 2. 幻方 3. 链表实现约瑟夫环 4. 逆序对个数

    首先,荷兰国旗问题是由Dijkstra提出的经典排序问题,主要目标是将一个数组分为三个部分:小于、等于和大于目标值的元素。此问题通常使用快速选择或三向切分快排来解决,它体现了排序算法中的高效处理能力,有助于...

    数据结构搜索&排序算法题.zip

    T3:【荷兰国旗问题】 设一个有 n 个字符的数组 A[n],存放的字符只有 3 种:R(红色)、W(白色)和 B(蓝色)。设计一个算法重新放置字符,让所有的 R排列在最前面,W 排列在中间,B 排列在最后。要求每个字符只...

    [免费]经典排序算法实例 C#源码

    再者,交叉排序(也称为“荷兰国旗问题”)是快速排序的一种变体,由Dijkstra提出。这个算法的目标是将数组分为三个部分:小于、等于和大于目标值的元素。通过多次迭代,可以将小于和大于部分逐渐扩大,最终完成排序...

    广东工业大学 数据结构 anyview 作业系统 第十章答案

    这里我们讨论了两种不同的排序算法及其优化,分别是直接插入排序和起泡排序,以及一个特殊的问题——荷兰国旗问题。 1. 直接插入排序(Insertion Sort): 直接插入排序是一种简单直观的排序算法,它的工作原理是...

    冒泡法排序

    二是引入“荷兰国旗问题”的思路,也称为“三向切分冒泡”,通过区分小于、等于和大于目标值的元素,减少不必要的比较和交换。 冒泡排序虽然简单易懂,但在实际应用中,由于其效率问题,往往不被优先考虑。在处理大...

    数据结构anyview答案

    数据结构是计算机科学中至关重要的一门学科...荷兰国旗问题展示了如何利用数组分治策略解决实际问题,而堆调整则在需要高效排序和优先级队列操作时发挥作用。理解这些算法对于提升数据处理能力和编写高效代码至关重要。

    C语言数据结构 广工 作业系统 10.内部排序

    霍兰德三色旗问题是荷兰国旗问题的一个变体,其目标是将一个数组按照指定的顺序(如红白蓝)重新排列。这个问题可以通过一趟扫描解决,时间复杂度为O(n)。 #### 霍兰德三色旗问题示例代码解析 ```c void HFlag...

    sortListsortListsortListsortListsortList

    除了以上经典排序算法,还有一些专门为链表设计的排序算法,如荷兰国旗问题(三向切分快速排序)等。这些算法通常能更好地利用链表的特性,提高排序效率。 总的来说,"sortList"这个主题涵盖了链表数据结构和各种...

    数据结构与算法标准答案.docx

    4. **荷兰国旗问题**: - 这是一个经典的问题,目标是将一个数组分为三个部分:小于某个特定值的元素,等于特定值的元素,以及大于特定值的元素。这个问题可以使用一次线性扫描来解决,时间复杂度为O(n)。 5. **...

    诺西(Nokia Siemens Networks 2011) 2011校园招聘笔试题

    5. **荷兰国旗问题**(Three-Way Quicksort):这可以用来优化链表的排序,特别适合处理部分已排序的链表,由Dijkstra提出,可以高效地处理链表。 在实际面试或笔试中,通常期望的解决方案是归并排序或荷兰国旗问题...

    广工数据结构 网络作业 代码

    以上内容主要围绕数据结构中几种经典的排序算法展开,包括插入排序、冒泡排序、荷兰国旗问题以及堆排序中的堆构建等。这些算法不仅在理论上有重要意义,也是实际应用中解决排序问题的基础工具。

    c代码-拍照排序,中间高两边低

    标题中的“拍照排序,中间高两边低”是一种排序算法,也称为“三向切分快速排序”或“荷兰国旗问题”。这种排序方法是由Dijkstra提出的,主要思想是将数组分为三部分:小于、等于和大于目标值的部分。在这个过程中,...

    c语音做的冒泡算法改进

    其次,引入了“荷兰国旗问题”的思路,将序列分为已排序、未排序和已确定排序三部分,减少不必要的比较次数。 改进的C语言冒泡排序代码可能如下: ```c #include void swap(int* a, int* b) { int temp = *a; ...

    LeetCodeAndSwordToOffer:LeetCode、SwordToOffer 等 Java 算法

    目录 02.字符串 03.树 04.哈希表 05.栈和队列 06.图 07.位运算 08.链表 程序基本输入输出 基础算法 ...冒泡排序 ...选择排序 ...荷兰国旗问题 Java 10 QuickSort 快速排序 Java 11 HeapSort 堆排序 Java 1

    经典算法(C语言).pdf

    荷兰国旗问题是排序问题的一个变种,由E.W. Dijkstra提出。问题涉及三种不同颜色的旗子,要求将这些旗子按照颜色顺序排列。这个问题的解决方法是使用“三向切分快速排序”的思想,即维护三个指针,分别指向三种颜色...

    经典的c算法

    荷兰国旗问题由著名计算机科学家Dijkstra提出,其任务是将一个数组中的元素按照三种颜色排序(比如红色、白色、蓝色)。这个问题的核心在于如何只扫描一次数组就能完成排序。 **算法原理**: 1. 定义三个指针,分别...

    leetcode中国-LeetCode:由Python和Go实现的LeetCode练习

    颜色分类(荷兰国旗问题) 四数之和 移除元素 数组操作 旋转图片 旋转数组 滑动窗口 无重复字符最长子串 树 验证二叉搜索树 图 拓扑排序 岛屿数量 单词搜索 回溯算法 组合总和 幂集 调度算法 动态规划 最大上升子序列 ...

Global site tag (gtag.js) - Google Analytics