`
icarusliu
  • 浏览: 238083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

1. 插入排序:

 

#include "main.h"

void insertSort(int *data, int length)
{
    int pos, i , temp;

    for (pos = 1; pos < length; pos++)
    {
        temp = data[pos];
        for (i = pos - 1; i >= 0; i--)
        {
            if (temp < data[i])
            {
                data[i + 1] = data[i];
                if (0 == i)
                {
                    data[0] = temp;
                    break;
                }
            }
            else
            {
                data[i + 1] = temp;
                break;
            }
        }
    }
}

 2. 选择排序:

 

#include "main.h"

void selectSort(int *data, int length)
{
    int max, pos, i;
    for (pos = length - 1; pos > 0; pos--)
    {
        max = 0;
        for (i = 1; i <= pos; i++)
        {
            if (data[max] < data[i])
            {
                max = i;
            }
        }
        if (max != pos)
        {
            swap(data, max, pos);
        }
    }
}
 

3. 冒泡排序:

 

#include "main.h"

void popSort(int *data, int length)
{
    int pos, i;
    for (pos = length - 1; pos >= 1; pos--)
    {
        for (i = 0; i < pos; i++)
        {
            if (data[i] > data[i + 1])
            {
                swap (data, i, i + 1);
            }
        }
    }
}
 

4. 快速排序:

 

 

#include "main.h"

/**
  *  Partition of the quickSort
  */
int partition(int *data, int start, int end)
{
    int i = start + 1, j = end;

    if (start >= end)
    {
        return start;
    }

    while (1)
    {
        while (i <= j && data[start] >= data[i])
        {
            i++;
        }
        while (i <= j && data[start] < data[j])
        {
            j--;
        }

        if (i < j)
        {
            swap(data, i, j);
        }
        else
        {
            swap(data, start, j);
            return j;
        }
    }
}

void quickSort(int *data, int start, int end)
{
    int pos;
    
    if (start >= end)
    {
        return;
    }

    pos = partition(data, start, end);
    quickSort(data, start, pos - 1);
    quickSort(data, pos + 1, end);
}
 

 

5. 归并排序:

 

#include "main.h"

void merge(int *data, int start, int middle, int end)
{
    int i = start, j = middle + 1;
    int pos = 0;
    int *temp = NULL;
    
    if (start >= end)
    {
        return;
    }

    temp = (int *)malloc((end - start + 1) * sizeof(int));

    while (i <= middle && j <= end)
    {
        temp[pos++] = data[i] <= data[j] ? data[i++] : data[j++];
    }

    while (i <= middle)
    {
        temp[pos++] = data[i++];
    }

    while (j <= end)
    {
        temp[pos++] = data[j++];
    }

    pos = 0;
    while (pos < end - start + 1)
    {
        data[start + pos] = temp[pos++];
    }

    free(temp);
}

void mergeSort(int *data, int length)
{
    int i, step;

    for (step = 1; step < length; step *= 2)
    {
        for (i = 0; i + step < length; i += 2 * step)
        {
            (i + 2 * step - 1 < length) ? 
                merge(data, i, i + step - 1, i + 2 * step - 1) : merge(data, i, i + step - 1, length - 1);
        }
    }
}
 

6. 堆排序:

 

#include "main.h"

void adjust(int *data, int pos, int length)
{
    int parent = pos, child = 2 * parent + 1;
    while (child < length)
    {
        if (child + 1 < length && data[child + 1] > data[child])
        {
            child++;
        }

        if (data[parent] < data[child])
        {
            swap(data, parent, child);
            parent = child;
            child = 2 * parent + 1;
        }
        else
        {
            break;
        }
    }
}

void createHeap(int *data, int length)
{
    int pos;
    for (pos = (length - 2) / 2; pos >= 0; pos--)
    {
        adjust(data, pos, length);
    }
}

void heapSort(int *data, int length)
{
    int pos;
    createHeap(data, length);
    for (pos = length - 1; pos >= 0; pos--)
    {
        swap(data, pos, 0);
        adjust(data, 0, pos);
    }
}

void heapSortNoWrap(int *data, int length)
{
    int start, end, child, parent, temp;

    end = length - 1;
    start = (end - 1) / 2;

    while (1)
    {
        if (0 <= start)
        {
            temp = data[start--];
        }
        else
        {
            if (0 == end)
            {
                return;
            }
            else
            {
                temp = data[end];
                data[end--] = data[0];
            }
        }

        parent = start + 1;
        child = 2 * parent + 1;
        while (child <= end)
        {
            if (child + 1 <= end && data[child + 1] > data[child])
            {
                child++;
            }
            if (temp < data[child])
            {
                data[parent] = data[child];
                parent = child;
                child = 2 * parent + 1;
            }
            else
            {
                break;
            }
        }

         data[parent] = temp;
    }
}
 

 

分享到:
评论

相关推荐

    python常用排序算法汇总

    该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...

    常用排序算法总结 常用排序算法总结 常用排序算法总结

    常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结

    浅析基于C语言的常用排序算法比较.pdf

    插入排序算法同样是基于C语言的一种常用排序算法。插入排序的基本思想是:把待排序的序列分为已排序和未排序两部分,每次将一个未排序的元素,按照其大小插入到已排序序列中的适当位置,直到所有元素都被插入。插入...

    常用排序算法的比较

    ### 常用排序算法的比较 #### 一、设计内容和要求 1. **设计内容**:通过随机函数产生N个随机整数,并采用多种排序算法对这些数进行排序,进而分析各种算法所需的排序时间,以确定哪些算法更为高效。 2. **设计...

    常用排序算法java演示

    本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...

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

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

    实验六 常用排序算法的对比分析

    石家庄铁道大学 刘立嘉 算法与数据结构 实验六 常用排序算法的对比分析

    几种常用排序算法的C语言实现

    一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序

    常用排序算法介绍_源码.rar|排序算法_源码.rar

    常用排序算法示例程序,内含TChart8控件。 示例程序涉及15种排序算法,使用C++代码实现,包含每种算法核心思想的介绍;可设置排序的数据个数、数据刷新显示时间等;使用TChart控件显示数据,显示界面可缩放。

    常用排序算法源码

    在编程领域,排序算法是计算机科学中的核心概念,它们用于对数据进行有序排列。这里我们主要探讨五种常见的排序算法,这些算法的源码你可以在提供的压缩包文件中找到:MergeSort(归并排序)、RadixSort(基数排序)...

    golang实现的常用排序算法

    golang实现的常用排序算法 golang实现的常用排序算法 golang实现的常用排序算法

    各种常用排序算法的C语言实现

    本资源提供了各种常用排序算法的C语言实现,源自严蔚敏的经典教材《数据结构》。下面将详细介绍这些排序算法及其在C语言中的实现原理。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序方法,通过不断交换相邻...

    常用排序算法,括交换法,冒泡法等

    ### 常用排序算法详解 #### 一、引言 排序算法作为计算机科学中的基础且重要的组成部分,在现实生活中有着广泛的应用。随着数据量的不断增大,如何高效地进行排序成为了一个亟需解决的问题。本篇文章将从简单排序...

    常用排序算法介绍_示例程序|排序算法_程序.rar

    本资源"常用排序算法介绍_示例程序"提供了一个深入理解这些算法的平台,结合了理论与实践,帮助开发者直观地看到各种排序算法的工作过程。 首先,让我们逐一探讨这些排序算法的核心思想: 1. **冒泡排序**:通过...

    C++常用排序算法(C++)

    【C++常用排序算法】 在计算机科学中,排序算法是用于对一组数据进行排列的算法。C++作为一种强大的编程语言,提供了多种实现排序的方法。本文将详细介绍C++中常用的几种排序算法及其实现。 1. **冒泡排序** 冒泡...

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找

    本资料包聚焦于"Java常用排序算法"和"程序员必须掌握的8大排序算法",并深入探讨了"二分法查找"这一高效搜索技术。 首先,我们来看八大排序算法。这些算法包括: 1. **冒泡排序**:最简单的排序方法,通过不断交换...

    C++ 常用排序算法

    以下是对C++中几种常用排序算法的详细说明: 1. **选择排序(Selection Sort)**: 选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始...

    8大常用排序算法实现

    本文将详细解析八大常用排序算法的实现,帮助你更好地理解和测试这些算法。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换,使得每次遍历都将最大(或最小)的元素“冒...

    C语言常用排序算法

    C语言常用排序算法 在计算机科学中,排序算法是指将一组无序的数据按照某种顺序排列的方法。排序算法是编程语言中非常重要的一部分,特别是在C语言中。下面将介绍几种常用的排序算法,包括选择排序、插入排序等。 ...

    Java常用排序算法

    在这个主题中,我们将深入探讨Java中的一些常用排序算法。排序是计算机科学中一个基础且重要的概念,它涉及将一组数据按照特定顺序进行排列。以下是Java中常见的几种排序算法: 1. 冒泡排序(Bubble Sort) 冒泡...

Global site tag (gtag.js) - Google Analytics