欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

快速排序c++

程序员文章站 2022-03-10 11:53:19
根据老师讲的思路写的,没有百度,所以也不知道完不完全正确,但目前测试都还好,都可以正常排序。 1 #include 2 using namespace std; 3 4 void quickSort(double *q ,int n) //一个double型数组还有一个代表这个 ......

根据老师讲的思路写的,没有百度,所以也不知道完不完全正确,但目前测试都还好,都可以正常排序。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void quicksort(double *q ,int n)   //一个double型数组还有一个代表这个数组的位数。 
 5 {
 6 
 7     double *left,*right;
 8     left = &q[0];
 9     right = &q[n-1];
10     double middle = q[0];
11 //    cout<<"left指向数组第一位,值为"<<*left<<endl;
12 //    cout<<"right指向数组最右一位,值为"<<*right<<endl;
13     while(left != right)
14     {
15         if (*right < middle)
16         {
17             *left = *right;
18             while (*left < middle)
19             {
20                 left++;
21                 if (left == right)
22                 {
23                     break;
24                 }
25             }
26             *right = *left;
27         } else {
28             right--;
29         }
30 
31     }
32     //左右指针指向一致时把middle给这个位置
33     *left = middle;
34 
35     //接下来取得*left和*right指向数组的位数
36     int count = 0;   //count1表示有count1个数在middle左边,最小为0
37     for(;q[count]<middle;count++) { }
38     //
39     //处理middle的左边
40     if (count>1)
41     {
42         double *qq = new double[count];
43         qq = q;
44         quicksort(qq,count);
45     }
46     
47     //处理middle的右边
48     int count2 = n-count-1; //count2表示有count2个数在middle右边,最小为0
49     if (count2 > 1)
50     {
51         double *ww = new double[count2];
52         ww = left+1;
53         quicksort(ww,count2);
54     }
55     
56 }
57 
58 
59 int main() {
60     cout<<"请输入数组长度";
61     int n;
62     cin>>n;
63     double *p = new double[n];
64     for (int i = 0;i<n;i++)
65     {
66         cin>>p[i];
67     }
68 
69     quicksort(p,n);
70 
71     for (int xxx = 0;xxx<n;xxx++)
72     {
73         cout<<p[xxx]<<"    ";
74     }
75     return 0;
76 }