`
ipython
  • 浏览: 293949 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

c语言quicksort 快速排序

阅读更多

之前写过C语言快速排序的算法,今天在《数据结构》(C语言版)清华大学出版社的快排,感觉比之前的更快,于是贴出来。

在我的机子上,排序100w的数据,只要0.3秒!其中我用python写了一个小脚本来生成100w个的随机数。附件为测试数据,本程序在GCC下编译通过。

#include "stdio.h"
#include "time.h"

int shu[1000000];
int i,j,k,len;

void  quick_sort(int left,int right);
void read_file();
void write_file();
int partitions(int,int);

int main()
{
    clock_t start, finish;
    double duration;
    read_file();
    start = clock();
    quick_sort(0,k);
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf ("take %.6f second to sort %d datas \n",duration,k);
    write_file();
    for (i=0;i<100;i++)
        printf("%d\n",shu[i]);
    return 0;
}

void read_file()
{
    FILE * fp;
    char *filename = "100w.txt";
    fp = fopen(filename,"r");
    k=0;
    while (fscanf(fp,"%d\n",&shu[k])!=EOF)
        k++;
    fclose(fp);
}

void write_file()
{
    FILE * fp;
    char *filename = "sorted_100w.txt";
    fp = fopen(filename,"w");
    i = 0;
    while (i<k)
    {
        fprintf(fp,"%d\n",shu[i]);
        i++;
    }
}

int partition(int left,int right)
{
    int key = shu[left];
    while (left < right)
    {
        while (left < right && shu[right] >= key)
            right--;
        shu[left] = shu[right];
        while (left < right && shu[left] <= key)
            left++;
        shu[right] = shu[left];
    }
    shu[left] = key;
    return left;
}

void quick_sort(int left,int right)
{
    int mid ;
    if (left < right)
    {
        mid = partition(left,right);
        quick_sort(left,mid-1);
        quick_sort(mid+1,right);
    }
}
 
分享到:
评论

相关推荐

    C语言写快速排序

    ### C语言实现快速排序 #### 知识点一:快速排序的基本概念 - **定义**:快速排序是一种高效的排序算法,采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。 - **发明者**:由英国...

    C语言实现快速排序算法

    快速排序算法,C语言 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有...

    c语言实快速排序算法 quicksort

    快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为...

    用c语言实现快速排序算法

    ### 快速排序算法知识点详解 #### 一、快速排序简介 快速排序是一种非常高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出。它采用分治法(Divide and Conquer)策略来把一个序列分为较小的...

    C语言快速排序算法实现

    标题:C语言快速排序算法实现 描述:本文将深入探讨如何使用C语言实现快速排序算法,这是一种高效的排序方法,广泛应用于各种数据结构处理场景。快速排序的基本思想是通过一趟排序将待排记录分隔成独立的两部分,...

    用C语言写的快速排序1.c

    void quicksort(int a[], int p, int r) { if(p){ int q = partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } }

    QuickSort【快速排序C语言版本】

    - `quick_sort.c`:快速排序算法的C语言源代码文件,展示了如何在C语言环境中实现快速排序的函数和主程序。 - `quick_sort.h`:可能包含了快速排序函数的声明,便于在其他模块中调用。 - `main.c`或`test.c`:测试...

    基于C语言的快速排序(免费提供源码)

    基于C语言的快速排序(Quicksort)是一种高效的排序算法,被广泛应用于各种计算机程序中。它采用分治法,通过递归实现,将一个大的数据集分成较小的子集进行排序,最终合并得到有序的数据集。快速排序的平均时间...

    C语言实现快速排序.zip

    在这个C语言实现的快速排序项目中,我们将深入理解快速排序的工作原理,并通过源代码学习如何在C语言中实现这一算法。 快速排序的主要步骤包括: 1. **选择基准(Pivot Selection)**:从待排序的数组或子序列中...

    C语言之快速排序.doc

    ### C语言实现快速排序 #### 快速排序简介 快速排序是一种非常高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序由英国计算机...

    基于C语言的快速排序算法.docx

    ### 基于C语言的快速排序算法 #### 一、快速排序算法概述 快速排序是一种高效的排序算法,由英国计算机科学家Tony Hoare在1960年提出。该算法利用了分治策略来实现对数据的有效排序。快速排序不仅在理论上具有良好...

    C语言实现快速排序算法(含实现步骤)

    在C语言中实现快速排序算法,我们需要理解算法的基本原理和步骤。快速排序的高效性主要来源于其分治的思想。首先,我们需要选取一个基准值(pivot),通常选择序列的最后一个元素。然后,通过一趟排序将序列分为两...

    c语言的快速排序算法

    根据提供的文件信息,本文将详细解析C语言中的快速排序算法,并深入探讨其实现原理与应用场景。 ### 快速排序算法概述 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。...

    排序算法-基于C语言实现的排序算法之QuickSort实现.zip

    在C语言中实现快速排序,主要涉及到递归、指针操作和数组元素的交换等概念。下面我们将深入探讨快速排序的工作原理、C语言实现以及其在实际应用中的特点。 快速排序的基本思想是分治法(Divide and Conquer)。它...

    自己写的基于C语言的快速排序。。。

    自己写的基于C语言的快速排序。。。 很好用啊 我们一直用他。。

    C语言快速排序.zip

    本压缩包文件“C语言快速排序.zip”包含了关于如何在C语言中实现快速排序的代码和可能的示例。 快速排序的基本思想是选取一个基准值(pivot),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字...

    冒泡法排序c语言程序 基础排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序

    C语言实现快速排序的代码可能涉及递归: ```c void quickSort(int arr[], int low, int high) { if (low ) { int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot ...

    045 快速排序 C语言 快速排序 C语言

    在C语言中实现快速排序,通常包含以下几个步骤: 1. **选择基准值(Pivot Selection)**:选择数组中的一个元素作为基准,常见的方法有选取第一个元素、最后一个元素或中间元素,也可以随机选取。 2. **分区操作...

    快速排序(C语言实现)

    在C语言中实现快速排序,我们需要以下几个关键步骤: 1. **选择基准**: 通常可以选择待排序数组的第一个元素或者最后一个元素作为基准,但更优的方式是随机选取,以减少最坏情况的发生概率。 2. **分区操作**: 将...

    c语言 quicksort

    快速排序(Quicksort)是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它是基于分治策略的,其基本思想是选取一个“基准”元素,将数组分成两个子序列,一个序列的所有元素都比基准小,另一个序列的所有元素都...

Global site tag (gtag.js) - Google Analytics