大数快速排序

Posted aardwolf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数快速排序相关的知识,希望对你有一定的参考价值。

  大数快速排序

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

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

代码如下:

 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 }

 

以上是关于大数快速排序的主要内容,如果未能解决你的问题,请参考以下文章

快速排序——寻找数组第K大数(由浅入深,四种方法对比讲解!)

算法:平衡树求第k大数 Sm 前段时间刚学会了用快速排序来求一个列中的第 k大数,可是她觉得每次 序列被改变

线性时间求取第 K 大数

快速排序-递归实现

java冒泡排序法代码

Python实现冒泡选择插入快速排序