首页 > 编程语言 > 详细

三部排序

时间:2020-04-24 09:18:04      阅读:57      评论:0      收藏:0      [点我收藏+]
 1 /*
 2 
 3 标题:三部排序
 4 
 5     一般的排序有许多经典算法,如快速排序、希尔排序等。
 6 
 7     但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
 8 
 9     比如,对一个整型数组中的数字进行分类排序:
10 
11     使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。
12     可以利用这个特点通过1次线性扫描就结束战斗!!
13 
14     以下的程序实现了该目标。
15 
16     其中x指向待排序的整型数组,len是数组的长度。
17 
18 void sort3p(int* x, int len)
19 {
20     int mod = 0;
21     int left = 0;
22     int right = len-1;
23 
24     while(mod<=right){
25         if(x[mod]<0){
26             int t = x[left];
27             x[left] = x[mod];
28             x[mod] = t;
29             left++;
30             mod++;
31         }
32         else if(x[mod]>0){
33             int t = x[right];
34             x[right] = x[mod];
35             x[mod] = t;
36             right--;
37         }
38         else{
39             __________________________;  //填空位置
40         }
41     }
42 
43 }
44 
45    如果给定数组:
46    25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0
47    则排序后为:
48    -3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25
49 
50 
51 
52 请分析代码逻辑,并推测划线处的代码,通过网页提交
53 注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
54 
55  */
56 #include <iostream>
57 using namespace std;
58 
59 void sort3p(int* x, int len)
60 {
61     int mod = 0;
62     int left = 0;
63     int right = len - 1;
64 
65     while (mod <= right) {
66         if (x[mod] < 0) {
67             int t = x[left];
68             x[left] = x[mod];
69             x[mod] = t;
70             left++;
71             mod++;
72         }
73         else if (x[mod] > 0) {
74             int t = x[right];
75             x[right] = x[mod];
76             x[mod] = t;
77             right--;
78         }
79         else {
80             mod++;  //填空位置
81         }
82     }
83 
84 }
85 int main() {
86     int a[] = { 25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0 };
87     sort3p(a,14);
88     for (int i = 0; i < 14; i++) {
89         cout << a[i] << " ";
90     }
91 }

 

三部排序

原文:https://www.cnblogs.com/zfq111/p/12764868.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!