大数快速排序

  大数快速排序

  这天做一道练习题,关于大数比较的。。。

  于是就有想法把大数比较融入排序算法中,结合快速排序非常简单。

代码如下:

 1 #include <string>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 void change(string &a, string &b){
 7     string t = a;
 8     a = b;
 9     b = t;
10 }
11 bool compare(string s[], int i, string k){    //s[i]>k,return true
12     int a = s[i].length(), b = k.length();
13 
14     if(k[0] == '-' && s[i][0] != '-'){
15         return true;
16     }else if(s[i][0] != '-' && k[0] != '-'){
17         if((a>b) || (a==b && s[i]>k)){
18             return true;
19         }
20     }else if(s[i][0] == '-' && k[0] == '-'){
21         if((a<b) || (a==b && s[i]<k)){
22             return true;
23         }
24     }
25     return false;
26 }
27 void bigQsort(string a[], int start, int end){
28     if(start >= end)
29         return ;
30     int i = start, j = end;
31     string k = a[start];
32     while(i != j){
33         while(i < j && compare(a, j, k))
34             j--;
35         change(a[i], a[j]);
36         while(i < j && !compare(a, i, k))
37             i++;
38         change(a[i], a[j]);
39     }
40     bigQsort(a, start, i);
41     bigQsort(a, i+1, end);
42 }
43 int main()
44 {
45     int n;
46     while(cin >> n){
47         string *s = new string[n];
48         for(int i = 0; i < n; i++)
49             cin >> s[i];
50         bigQsort(s,0,n-1);
51         cout << "排序结果:" << endl << s[0];
52         for(int i = 1; i < n; i++)
53             cout << " " << s[i];
54         cout << endl;
55     }
56     return 0;
57 }

 

posted @ 2018-12-05 17:59  MoonTwilight  阅读(576)  评论(0编辑  收藏  举报