C语言简单实现快速排序

 更新时间:2019年01月17日 11:54:45   作者:n.xuanrui  
快速排序是一种不稳定排序,这篇文章主要为大家详细介绍了C语言简单实现快速排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

快速排序是一种不稳定排序,它的时间复杂度为O(n·lgn),最坏情况为O(n2);空间复杂度为O(n·lgn)。
这种排序方式是对于冒泡排序的一种改进,它采用分治模式,将一趟排序的数据分割成独立的两部分,其中一组数据的每个值都小于另一组。每一趟在进行分类的同时实现排序。

其中每一趟的模式通过设置key当基准元素,key的选择可以是数据的第一个,也可以是数据的最后一个。这里以每次选取数据的第一个为例:

具体代码实现:

#include<stdio.h>
#define N 6
 int fun(int arr[],int low,int high)
 {
  int key;
  key=arr[low];
  while(low<high)
  {
    while(low<high && arr[high]>=key)
      high--;
    if(low<high)
      arr[low++]=arr[high];
    while(low<high && arr[low]<=key)
      low++;
    if(low<high)
      arr[high--]=arr[low];
   }
   arr[low]=key;
   return low;
 } 
void quick_sort(int arr[],int start,int end)
{
  int pos;
  if(start<end)
  {
  pos=fun(arr,start,end);
  quick_sort(arr,start,pos-1);
  quick_sort(arr,pos+1,end);
  }
}
int main()
{
  int i;
  int arr[N]={32,12,7,78,23,45};
  for(i=0;i<N;i++)
  {
    printf("%d ",arr[i]);
  }
  printf("\n");
  quick_sort(arr,0,N-1);
  for(i=0;i<N;i++)
  {
    printf("%d ",arr[i]);
  }
  return 0;
 } 

由于是第一次撰写博客,许多地方没有一个良好的习惯,还请读者见谅。创建这个博客的目的实际上是为了让自己对于数据结构与算法加深印象,通过博客的形式展现出来一方面方便自己查阅,另一方面以希望能够通过自己的微薄之力帮助到有需要的朋友。

也希望自己能够坚持下去,认真的去做这么一件事。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++结构体字节对齐和共用体大小

    C++结构体字节对齐和共用体大小

    这篇文章主要介绍了C++结构体字节对齐和共用体大小,结构体内存对齐在笔试和面试中经常被问到,所以这篇文章做个总结,首先通过代码验证不同结构体的内存大小,需要的朋友可以参考下
    2021-11-11
  • C++遍历文件夹下文件的方法

    C++遍历文件夹下文件的方法

    这篇文章主要介绍了C++遍历文件夹下文件的方法,实例分析了C++针对文件夹遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C++用mysql自带的头文件连接数据库

    C++用mysql自带的头文件连接数据库

    现在正做一个接口,通过不同的连接字符串操作不同的数据库。要用到mysql数据库。通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法。可以通过2种方法实现。第一种方法是利用ADO连接,第二种方法是利用mysql自己的api函数进行连接。今天主要来讲解下使用API
    2016-07-07
  • 线程池的原理与实现详解

    线程池的原理与实现详解

    下面利用C语言来实现一个简单的线程池,为了使得这个线程池库使用起来更加方便,特在C实现中加入了一些OO的思想,与Objective-C不同,它仅仅是使用了struct来模拟了c++中的类,其实这种方式在linux内核中大量可见
    2013-09-09
  • C++开发绘制正弦曲线的方法

    C++开发绘制正弦曲线的方法

    这篇文章主要为大家详细介绍了C++绘制正弦曲线的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C++ invoke与function的区别解析

    C++ invoke与function的区别解析

    invoke函数的实现原理是通过使用SFINAE(Substitution Failure Is Not An Error)技术来判断可调用对象的类型,并根据类型调用对应的调用方式,这篇文章主要介绍了C++ invoke与function的区别,需要的朋友可以参考下
    2023-10-10
  • QT进行CSV文件初始化与读写操作

    QT进行CSV文件初始化与读写操作

    这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助
    2025-04-04
  • C++命名空间namespace的介绍与使用

    C++命名空间namespace的介绍与使用

    今天小编就为大家分享一篇关于C++命名空间namespace的介绍与使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 详解C++中new运算符和delete运算符的使用

    详解C++中new运算符和delete运算符的使用

    这篇文章主要介绍了C++中new运算符和delete运算符的使用,文章来自于微软开发者文档,因而根据Visual C++的一些特性来进行讲解,需要的朋友可以参考下
    2016-01-01
  • 浅谈QT内存泄漏

    浅谈QT内存泄漏

    本文主要介绍了浅谈QT内存泄漏,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论