<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
qsort [C++ Reference]
</title>
<meta name="generator" content="DokuWiki Release 2009-12-25c "Lemming"" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2010-03-03T05:30:46-0800" />
<meta name="keywords" content="c,other,qsort" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/c/other/qsort?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&ns=c:other" />
<link rel="edit" title="Edit this page" href="/wiki/c/other/qsort?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/c/other/qsort" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/c/other/qsort" />
<link rel="canonical" href="http://www.cppreference.com/wiki/c/other/qsort" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&t=custom1&tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='c:other';var JSINFO = {"id":"c:other:qsort","namespace":"c:other"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>
<link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />
</head>
<body>
<div class="dokuwiki">
<div class="stylehead">
<div class="breadcrumbs">
<span class="bchead">You are here: </span><a href="../../start.html" title="start">C++ Reference</a> » <a href="../../c/start.html" title="c:start">The Standard C Library</a> » <a href="../../c/other/start.html" title="c:other:start">Other Standard C Functions</a> » <a href="../../c/other/qsort.html" title="c:other:qsort">qsort</a> </div>
</div>
<div class="page">
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
<!-- wikipage start -->
<h2><a name="qsort" id="qsort">qsort</a></h2>
<div class="level2">
<p>
Syntax:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="co2">#include <cstdlib></span>
<span class="kw4">void</span> qsort<span class="br0">(</span> <span class="kw4">void</span> <span class="sy0">*</span>buf<span class="sy0">,</span> size_t num<span class="sy0">,</span> size_t size<span class="sy0">,</span> <span class="kw4">int</span> <span class="br0">(</span><span class="sy0">*</span>compare<span class="br0">)</span><span class="br0">(</span><span class="kw4">const</span> <span class="kw4">void</span><span class="sy0">*,</span> <span class="kw4">const</span> <span class="kw4">void</span> <span class="sy0">*</span><span class="br0">)</span> <span class="br0">)</span><span class="sy0">;</span></pre>
<p>
The qsort function sorts <code>buf</code> (which contains <code>num</code> items, each of size <code>size</code>)
using <a href="http://en.wikipedia.org/wiki/Quicksort" class="urlextern" title="http://en.wikipedia.org/wiki/Quicksort" rel="nofollow">Quicksort</a>. The <code>compare</code> function is used to compare the items in <code>buf</code>,
and should return negative if the first argument is less than the second,
zero if they are equal, and positive if the first argument is greater than the
second. qsort() sorts <code>buf</code> in ascending order.
</p>
<p>
For example, the following bit of code uses qsort to sort an array of integers:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="kw4">int</span> compare_ints<span class="br0">(</span> <span class="kw4">const</span> <span class="kw4">void</span><span class="sy0">*</span> a<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">void</span><span class="sy0">*</span> b <span class="br0">)</span> <span class="br0">{</span> <span class="co1">// compare function</span>
<span class="kw4">int</span><span class="sy0">*</span> arg1 <span class="sy0">=</span> <span class="br0">(</span><span class="kw4">int</span><span class="sy0">*</span><span class="br0">)</span> a<span class="sy0">;</span>
<span class="kw4">int</span><span class="sy0">*</span> arg2 <span class="sy0">=</span> <span class="br0">(</span><span class="kw4">int</span><span class="sy0">*</span><span class="br0">)</span> b<span class="sy0">;</span>
<span class="kw1">if</span><span class="br0">(</span> <span class="sy0">*</span>arg1 <span class="sy0"><</span> <span class="sy0">*</span>arg2 <span class="br0">)</span> <span class="kw1">return</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span>
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> <span class="sy0">*</span>arg1 <span class="sy0">==</span> <span class="sy0">*</span>arg2 <span class="br0">)</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="kw1">else</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="kw4">int</span> array<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">{</span> <span class="sy0">-</span>2<span class="sy0">,</span> 99<span class="sy0">,</span> 0<span class="sy0">,</span> <span class="sy0">-</span>743<span class="sy0">,</span> 2<span class="sy0">,</span> 3<span class="sy0">,</span> 4 <span class="br0">}</span><span class="sy0">;</span>
<span class="kw4">int</span> array_size <span class="sy0">=</span> <span class="nu0">7</span><span class="sy0">;</span>
...
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"Before sorting: "</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> array_size<span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"%d "</span><span class="sy0">,</span> array<span class="br0">[</span>i<span class="br0">]</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"<span class="es1">\n</span>"</span> <span class="br0">)</span><span class="sy0">;</span>
qsort<span class="br0">(</span> array<span class="sy0">,</span> array_size<span class="sy0">,</span> <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy0">,</span> compare_ints <span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"After sorting: "</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> array_size<span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"%d "</span><span class="sy0">,</span> array<span class="br0">[</span>i<span class="br0">]</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"<span class="es1">\n</span>"</span> <span class="br0">)</span><span class="sy0">;</span></pre>
<p>
When run, this code displays the following output:
</p>
<pre class="code">
Before sorting: -2 99 0 -743 2 3 4
After sorting: -743 -2 0 2 3 4 99</pre>
<p>
Related Topics: <a href="../../c/other/bsearch.html" class="wikilink1" title="c:other:bsearch">bsearch</a>, <a href="../../stl/algorithm/sort.html" class="wikilink1" title="stl:algorithm:sort">sort</a>
</p>
</div>
<!-- wikipage stop -->
</div>
<div class="clearer"> </div>
<div class="stylefoot">
<div class="meta">
<div class="user">
</div>
<!--
<div class="doc">
c/other/qsort.txt · Last modified: 03/03/2010 05:30 by nate </div>
-->
</div>
</div></div></body>
</html>