c语言快速排序算法示例代码分享

 更新时间:2014年02月28日 09:55:06   作者:  
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)


步骤为:
1.从数列中挑出一个元素,称为 "基准"(pivot);
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

复制代码 代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define RANDOM(i) (rand()%i)
#define N 9    //设置数组长度

//分区操作
int Partition(int array[], int left, int right)
{
 int i,j;
 int temp;
 j = left-1;
 for (i=left; i<=right; i++)
 {
  if (array[i] <=  array[right]) //以最后一个数组的值为基准
  {
   j++;
   temp = array[j];
   array[j] = array[i];
   array[i] = temp;
  }
 }
 return j;
}

//迭代运算
void QuikSort(int array[], int left, int right)
{
 int pivot;
 if (left < right)
 {
  pivot = Partition(array, left, right);
  QuikSort(array, left, pivot-1);
  QuikSort(array, pivot+1, right);
 }
}

//示例
int main()
{
 int i = 0;
 int a[N];
 srand((int)time(0));  //设置随机数种子

 for (i=0; i<N; i++)  //排序前
 {
  a[i] = RANDOM(100);
  printf("%d\t", a[i]);
 }
 printf("\n\n");

 QuikSort(a, 0, N-1);

 for (i=0; i<N; i++) //排序后
 {
  printf("%d\t", a[i]);
 }
}

相关文章

  • 利用Matlab绘制甘特图的方法详解

    利用Matlab绘制甘特图的方法详解

    这篇文章主要为大家详细介绍了如何利用Matlab实现甘特图(gantt chart)的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-10-10
  • C语言函数指针详解

    C语言函数指针详解

    本文主要介绍 C语言函数指针的知识,这里整理了详细的资料及示例代码以便大家学习参考,有需要学习此部分知识的朋友可以参考下
    2021-09-09
  • C语言 分析逆序字符串与字符串的逆序输出有什么区别

    C语言 分析逆序字符串与字符串的逆序输出有什么区别

    例如,给定一个字符串 s,将 s 中的字符顺序颠倒过来,如 s = “abcd”,逆序后变成 “dcba”。可以采用多种方法对字符串进行逆序,以下将对其中的方法和字符串的逆序输出的区别进行分析
    2022-04-04
  • Qt+Quick实现图片演示器的开发

    Qt+Quick实现图片演示器的开发

    这篇文章主要为大家详细介绍了Qt如何利用Quick实现图片演示器的开发,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2023-01-01
  • C指针原理教程之C快速入门

    C指针原理教程之C快速入门

    C语言作为大学编程或者计算机专业的一门必修课,把很多初学编程的小伙伴都难住了,感觉无从下手,今天呢,我们来简单介绍下,如何快速入门C语言
    2019-02-02
  • 使用C语言实现最小生成树求解的简单方法

    使用C语言实现最小生成树求解的简单方法

    这篇文章主要介绍了使用C语言实现最小生成树求解的简单方法,包括Prim算法和Kruskal算法的两种求解方式,需要的朋友可以参考下
    2015-08-08
  • C++ 构造双向链表的实现代码

    C++ 构造双向链表的实现代码

    本篇文章是对C++中构造双向链表的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 基于C语言实现扫雷游戏

    基于C语言实现扫雷游戏

    这篇文章主要为大家详细介绍了基于C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++ move()函数及priority_queue队列使用记录

    C++ move()函数及priority_queue队列使用记录

    move(obj)函数的功能是把obj当做右值处理,可以应用在对象的移动上,这篇文章主要介绍了C++ move()函数及priority_queue队列使用记录,需要的朋友可以参考下
    2023-01-01
  • Opencv实现最小外接矩形和圆

    Opencv实现最小外接矩形和圆

    这篇文章主要为大家详细介绍了Opencv实现最小外接矩形和圆,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论