![图片[1]-Java常用的八种排序算法与代码实现-遇见博客](https://www.yuni9.cn/wp-content/uploads/2021/12/QQ浏览器截图20211213085249.png)
1.直接插入排序
经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。
将第一个数和第二个数排列,随后组成一个井然有序编码序列
将第三个数插进进来,组成一个新的井然有序编码序列。
对第四个数、第五个数……直至最终一个数,反复第二步。
要怎么写写出编码:
最先设置插进频次,即循环系统频次,for(inti=1;i设置插进数和获得早已安排好编码序列的最终一个数的十位数。insertNum和j=i-1。
从最终一个数刚开始往前循环系统,假如插进数低于当今数,就将当今数向后挪动一位。
将当今数置放到空着的部位,即j+1
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
<span class=”token keyword”>public</span> <span class=”token keyword”>void</span> <span class=”token function”>insertSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> a<span class=”token punctuation”>)</span><span class=”token punctuation”>{</span>
<span class=”token keyword”>int</span> length<span class=”token operator”>=</span>a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span><span class=”token comment”>//数组长度,将这个提取出来是为了提高速度。</span> <span class=”token keyword”>int</span> insertNum<span class=”token punctuation”>;</span><span class=”token comment”>//要插入的数</span> <span class=”token keyword”>for</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i<span class=”token operator”>=</span><span class=”token number”>1</span><span class=”token punctuation”>;</span>i<span class=”token operator”><</span>length<span class=”token punctuation”>;</span>i<span class=”token operator”>++</span><span class=”token punctuation”>)</span><span class=”token punctuation”>{</span><span class=”token comment”>//插入的次数</span> insertNum<span class=”token operator”>=</span>a<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span><span class=”token comment”>//要插入的数</span> <span class=”token keyword”>int</span> j<span class=”token operator”>=</span>i<span class=”token operator”>-</span><span class=”token number”>1</span><span class=”token punctuation”>;</span><span class=”token comment”>//已经排序好的序列元素个数</span> <span class=”token keyword”>while</span><span class=”token punctuation”>(</span>j<span class=”token operator”>>=</span><span class=”token number”>0</span><span class=”token operator”>&&</span>a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token operator”>></span>insertNum<span class=”token punctuation”>)</span><span class=”token punctuation”>{</span><span class=”token comment”>//序列从后到前循环,将大于insertNum的数向后移动一格</span> a<span class=”token punctuation”>[</span>j<span class=”token operator”>+</span><span class=”token number”>1</span><span class=”token punctuation”>]</span><span class=”token operator”>=</span>a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span><span class=”token comment”>//元素移动一格</span> j<span class=”token operator”>–</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> a<span class=”token punctuation”>[</span>j<span class=”token operator”>+</span><span class=”token number”>1</span><span class=”token punctuation”>]</span><span class=”token operator”>=</span>insertNum<span class=”token punctuation”>;</span><span class=”token comment”>//将需要插入的数放在要插入的位置。</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> |
2.希尔排序
对于直接插入排序问题,数据量巨大时。
将数的数量设成n,取单数k=n/2,将下标误差为k的书分成一组,组成井然有序编码序列。
再取k=k/2,将下标误差为k的书分成一组,组成井然有序编码序列。
反复第二步,直至k=1实行简易插入排序。
怎样写出编码:
最先明确分的几组。
随后对组里原素开展插入排序。
随后将length/2,反复1,2步,直至length=0才行。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class=”token keyword”>public</span> <span class=”token keyword”>void</span> <span class=”token function”>sheelSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> a<span class=”token punctuation”>)</span><span class=”token punctuation”>{</span>
<span class=”token keyword”>int</span> d <span class=”token operator”>=</span> a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span>d<span class=”token operator”>!=</span><span class=”token number”>0</span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> d<span class=”token operator”>=</span>d<span class=”token operator”>/</span><span class=”token number”>2</span><span class=”token punctuation”>;</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token keyword”>int</span> x <span class=”token operator”>=</span> <span class=”token number”>0</span><span class=”token punctuation”>;</span> x <span class=”token operator”><</span> d<span class=”token punctuation”>;</span> x<span class=”token operator”>++</span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span><span class=”token comment”>//分的组数</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i <span class=”token operator”>=</span> x <span class=”token operator”>+</span> d<span class=”token punctuation”>;</span> i <span class=”token operator”><</span> a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span> i <span class=”token operator”>+=</span> d<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span><span class=”token comment”>//组中的元素,从第二个数开始</span> <span class=”token keyword”>int</span> j <span class=”token operator”>=</span> i <span class=”token operator”>-</span> d<span class=”token punctuation”>;</span><span class=”token comment”>//j为有序序列最后一位的位数</span> <span class=”token keyword”>int</span> temp <span class=”token operator”>=</span> a<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span><span class=”token comment”>//要插入的元素</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token punctuation”>;</span> j <span class=”token operator”>>=</span> <span class=”token number”>0</span> <span class=”token operator”>&&</span> temp <span class=”token operator”><</span> a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> j <span class=”token operator”>-=</span> d<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span><span class=”token comment”>//从后往前遍历。</span> a<span class=”token punctuation”>[</span>j <span class=”token operator”>+</span> d<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span><span class=”token comment”>//向后移动d位</span> <span class=”token punctuation”>}</span> a<span class=”token punctuation”>[</span>j <span class=”token operator”>+</span> d<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> temp<span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> |
3.简单选择排序
常用于取序列中最大最小的几个数时。
(假如每一次较为都互换,那麼就是说互换排列;假如每一次较为完一个循环系统再互换,就是说简单选择排序。)
遍历全部编码序列,将最少的数放到最前边。
遍历剩余的编码序列,将最少的数放到最前边。
反复第二步,直至仅剩一个数。
怎样写出编码:
最先明确循环系统频次,而且记牢当今大数字和位置定位。
将位置定位后边全部的数与当今大数字开展比照,小数赋值给key,并记牢小数的部位。
核对进行后,将最少的值与第一个数的值互换。
反复2、3步。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class=”token keyword”>public</span> <span class=”token keyword”>void</span> <span class=”token function”>selectSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> a<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span>
<span class=”token keyword”>int</span> length <span class=”token operator”>=</span> a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i <span class=”token operator”>=</span> <span class=”token number”>0</span><span class=”token punctuation”>;</span> i <span class=”token operator”><</span> length<span class=”token punctuation”>;</span> i<span class=”token operator”>++</span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span><span class=”token comment”>//循环次数</span> <span class=”token keyword”>int</span> key <span class=”token operator”>=</span> a<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> position<span class=”token operator”>=</span>i<span class=”token punctuation”>;</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token keyword”>int</span> j <span class=”token operator”>=</span> i <span class=”token operator”>+</span> <span class=”token number”>1</span><span class=”token punctuation”>;</span> j <span class=”token operator”><</span> length<span class=”token punctuation”>;</span> j<span class=”token operator”>++</span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span><span class=”token comment”>//选出最小的值和位置</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span> <span class=”token operator”><</span> key<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> key <span class=”token operator”>=</span> a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> position <span class=”token operator”>=</span> j<span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> a<span class=”token punctuation”>[</span>position<span class=”token punctuation”>]</span><span class=”token operator”>=</span>a<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span><span class=”token comment”>//交换位置</span> a<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token operator”>=</span>key<span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> |
4.堆排序
对简单选择排序的优化。
- 将序列构建成大顶堆。
- 将根节点与最后一个节点交换,然后断开最后一个节点。
- 重复第一、二步,直到所有节点断开。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<span class=”token keyword”>public</span> <span class=”token keyword”>void</span> <span class=”token function”>heapSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> a<span class=”token punctuation”>)</span><span class=”token punctuation”>{</span>
System<span class=”token punctuation”>.</span><span class=”token keyword”>out</span><span class=”token punctuation”>.</span><span class=”token function”>println</span><span class=”token punctuation”>(</span><span class=”token string”>”开始排序”</span><span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> arrayLength<span class=”token operator”>=</span>a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span> <span class=”token comment”>//循环建堆 </span> <span class=”token keyword”>for</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i<span class=”token operator”>=</span><span class=”token number”>0</span><span class=”token punctuation”>;</span>i<span class=”token operator”><</span>arrayLength<span class=”token operator”>-</span><span class=”token number”>1</span><span class=”token punctuation”>;</span>i<span class=”token operator”>++</span><span class=”token punctuation”>)</span><span class=”token punctuation”>{</span> <span class=”token comment”>//建堆 </span>
<span class=”token function”>buildMaxHeap</span><span class=”token punctuation”>(</span>a<span class=”token punctuation”>,</span>arrayLength<span class=”token operator”>-</span><span class=”token number”>1</span><span class=”token operator”>-</span>i<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> |
5.冒泡排序
一般不用。
将编码序列中全部原素两组较为,将较大的放到最终面。
将剩下编码序列中全部原素两组较为,将较大的放到最终面。
反复第二步,直至仅剩一个数。
怎样写出编码:
设定循环系统频次。
设定刚开始较为的十位数,和完毕的十位数。
两组较为,将最少的放进前边去。
反复2、3步,直至循环系统频次结束。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
<span class=”token keyword”>public</span> <span class=”token keyword”>void</span> <span class=”token function”>bubbleSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> a<span class=”token punctuation”>)</span><span class=”token punctuation”>{</span>
<span class=”token keyword”>int</span> length<span class=”token operator”>=</span>a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> temp<span class=”token punctuation”>;</span> <span class=”token keyword”>for</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i<span class=”token operator”>=</span><span class=”token number”>0</span><span class=”token punctuation”>;</span>i<span class=”token operator”><</span>a<span class=”token punctuation”>.</span>length<span class=”token punctuation”>;</span>i<span class=”token operator”>++</span><span class=”token punctuation”>)</span><span class=”token punctuation”>{</span> <span class=”token keyword”>for</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span> j<span class=”token operator”>=</span><span class=”token number”>0</span><span class=”token punctuation”>;</span>j<span class=”token operator”><</span>a<span class=”token punctuation”>.</span>length<span class=”token operator”>-</span>i<span class=”token operator”>-</span><span class=”token number”>1</span><span class=”token punctuation”>;</span>j<span class=”token operator”>++</span><span class=”token punctuation”>)</span><span class=”token punctuation”>{</span> <span class=”token keyword”>if</span><span class=”token punctuation”>(</span>a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token operator”>></span>a<span class=”token punctuation”>[</span>j<span class=”token operator”>+</span><span class=”token number”>1</span><span class=”token punctuation”>]</span><span class=”token punctuation”>)</span><span class=”token punctuation”>{</span> temp<span class=”token operator”>=</span>a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> a<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token operator”>=</span>a<span class=”token punctuation”>[</span>j<span class=”token operator”>+</span><span class=”token number”>1</span><span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> a<span class=”token punctuation”>[</span>j<span class=”token operator”>+</span><span class=”token number”>1</span><span class=”token punctuation”>]</span><span class=”token operator”>=</span>temp<span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> |
6.快速排序
要求时间最快时。
挑选第一个数为p,低于p的数放到左侧,超过p的数放到右侧。
递归的将p左侧和右侧的数都依照第一步开展,直至不可以递归。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class=”token keyword”>public</span> <span class=”token keyword”>static</span> <span class=”token keyword”>void</span> <span class=”token function”>quickSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> numbers<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> start<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> end<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span>
<span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>start <span class=”token operator”><</span> end<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> <span class=”token keyword”>int</span> <span class=”token keyword”>base</span> <span class=”token operator”>=</span> numbers<span class=”token punctuation”>[</span>start<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token comment”>// 选定的基准值(第一个数值作为基准值) </span> <span class=”token keyword”>int</span> temp<span class=”token punctuation”>;</span> <span class=”token comment”>// 记录临时中间值 </span> <span class=”token keyword”>int</span> i <span class=”token operator”>=</span> start<span class=”token punctuation”>,</span> j <span class=”token operator”>=</span> end<span class=”token punctuation”>;</span> <span class=”token keyword”>do</span> <span class=”token punctuation”>{</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span> <span class=”token operator”><</span> <span class=”token keyword”>base</span><span class=”token punctuation”>)</span> <span class=”token operator”>&&</span> <span class=”token punctuation”>(</span>i <span class=”token operator”><</span> end<span class=”token punctuation”>)</span><span class=”token punctuation”>)</span> i<span class=”token operator”>++</span><span class=”token punctuation”>;</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span> <span class=”token operator”>></span> <span class=”token keyword”>base</span><span class=”token punctuation”>)</span> <span class=”token operator”>&&</span> <span class=”token punctuation”>(</span>j <span class=”token operator”>></span> start<span class=”token punctuation”>)</span><span class=”token punctuation”>)</span> j<span class=”token operator”>–</span><span class=”token punctuation”>;</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>i <span class=”token operator”><=</span> j<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> temp <span class=”token operator”>=</span> numbers<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> numbers<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> numbers<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> numbers<span class=”token punctuation”>[</span>j<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> temp<span class=”token punctuation”>;</span> i<span class=”token operator”>++</span><span class=”token punctuation”>;</span> j<span class=”token operator”>–</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span>i <span class=”token operator”><=</span> j<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>start <span class=”token operator”><</span> j<span class=”token punctuation”>)</span> <span class=”token function”>quickSort</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>,</span> start<span class=”token punctuation”>,</span> j<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>end <span class=”token operator”>></span> i<span class=”token punctuation”>)</span> <span class=”token function”>quickSort</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>,</span> i<span class=”token punctuation”>,</span> end<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> |
7.归并排序
速度仅次于快排,内存少的时候使用,可以进行并行计算的时候使用。
挑选邻近2个数构成一个井然有序编码序列。
挑选邻近的2个井然有序编码序列构成一个井然有序编码序列。
反复第二步,直至所有构成一个井然有序编码序列。
代码实现如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<span class=”token keyword”>public</span> <span class=”token keyword”>static</span> <span class=”token keyword”>void</span> <span class=”token function”>mergeSort</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> numbers<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> left<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> right<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span>
<span class=”token keyword”>int</span> t <span class=”token operator”>=</span> <span class=”token number”>1</span><span class=”token punctuation”>;</span><span class=”token comment”>// 每组元素个数 </span> <span class=”token keyword”>int</span> size <span class=”token operator”>=</span> right <span class=”token operator”>-</span> left <span class=”token operator”>+</span> <span class=”token number”>1</span><span class=”token punctuation”>;</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span>t <span class=”token operator”><</span> size<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> <span class=”token keyword”>int</span> s <span class=”token operator”>=</span> t<span class=”token punctuation”>;</span><span class=”token comment”>// 本次循环每组元素个数 </span> t <span class=”token operator”>=</span> <span class=”token number”>2</span> <span class=”token operator”>*</span> s<span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> i <span class=”token operator”>=</span> left<span class=”token punctuation”>;</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span>i <span class=”token operator”>+</span> <span class=”token punctuation”>(</span>t <span class=”token operator”>-</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span> <span class=”token operator”><</span> size<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> <span class=”token function”>merge</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>,</span> i<span class=”token punctuation”>,</span> i <span class=”token operator”>+</span> <span class=”token punctuation”>(</span>s <span class=”token operator”>-</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span><span class=”token punctuation”>,</span> i <span class=”token operator”>+</span> <span class=”token punctuation”>(</span>t <span class=”token operator”>-</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span><span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> i <span class=”token operator”>+=</span> t<span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>i <span class=”token operator”>+</span> <span class=”token punctuation”>(</span>s <span class=”token operator”>-</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span> <span class=”token operator”><</span> right<span class=”token punctuation”>)</span> <span class=”token function”>merge</span><span class=”token punctuation”>(</span>numbers<span class=”token punctuation”>,</span> i<span class=”token punctuation”>,</span> i <span class=”token operator”>+</span> <span class=”token punctuation”>(</span>s <span class=”token operator”>-</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span><span class=”token punctuation”>,</span> right<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token punctuation”>}</span> <span class=”token keyword”>private</span> <span class=”token keyword”>static</span> <span class=”token keyword”>void</span> <span class=”token function”>merge</span><span class=”token punctuation”>(</span><span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> data<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> p<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> q<span class=”token punctuation”>,</span> <span class=”token keyword”>int</span> r<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> <span class=”token keyword”>int</span><span class=”token punctuation”>[</span><span class=”token punctuation”>]</span> B <span class=”token operator”>=</span> <span class=”token keyword”>new</span> <span class=”token keyword”>int</span><span class=”token punctuation”>[</span>data<span class=”token punctuation”>.</span>length<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> s <span class=”token operator”>=</span> p<span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> t <span class=”token operator”>=</span> q <span class=”token operator”>+</span> <span class=”token number”>1</span><span class=”token punctuation”>;</span> <span class=”token keyword”>int</span> k <span class=”token operator”>=</span> p<span class=”token punctuation”>;</span> <span class=”token keyword”>while</span> <span class=”token punctuation”>(</span>s <span class=”token operator”><=</span> q <span class=”token operator”>&&</span> t <span class=”token operator”><=</span> r<span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>data<span class=”token punctuation”>[</span>s<span class=”token punctuation”>]</span> <span class=”token operator”><=</span> data<span class=”token punctuation”>[</span>t<span class=”token punctuation”>]</span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span> B<span class=”token punctuation”>[</span>k<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> data<span class=”token punctuation”>[</span>s<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> s<span class=”token operator”>++</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token keyword”>else</span> <span class=”token punctuation”>{</span> B<span class=”token punctuation”>[</span>k<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> data<span class=”token punctuation”>[</span>t<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> t<span class=”token operator”>++</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> k<span class=”token operator”>++</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> <span class=”token keyword”>if</span> <span class=”token punctuation”>(</span>s <span class=”token operator”>==</span> q <span class=”token operator”>+</span> <span class=”token number”>1</span><span class=”token punctuation”>)</span> B<span class=”token punctuation”>[</span>k<span class=”token operator”>++</span><span class=”token punctuation”>]</span> <span class=”token operator”>=</span> data<span class=”token punctuation”>[</span>t<span class=”token operator”>++</span><span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token keyword”>else</span> B<span class=”token punctuation”>[</span>k<span class=”token operator”>++</span><span class=”token punctuation”>]</span> <span class=”token operator”>=</span> data<span class=”token punctuation”>[</span>s<span class=”token operator”>++</span><span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token keyword”>for</span> <span class=”token punctuation”>(</span><span class=”token keyword”>int</span> i <span class=”token operator”>=</span> p<span class=”token punctuation”>;</span> i <span class=”token operator”><=</span> r<span class=”token punctuation”>;</span> i<span class=”token operator”>++</span><span class=”token punctuation”>)</span> data<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span> <span class=”token operator”>=</span> B<span class=”token punctuation”>[</span>i<span class=”token punctuation”>]</span><span class=”token punctuation”>;</span> <span class=”token punctuation”>}</span> |
8.基数排序
用于大量数,很长的数进行排序时。
- 将所有的数的个位数取出,按照个位数进行排序,构成一个序列。
- 将新构成的所有的数的十位数取出,按照十位数进行排序,构成一个序列。