65,203
社区成员




void Quick_Sort(int A[], int p ,int r)
{
if(p < r)
{
int q = Partition(A, p, r);
Quick_Sort(A, p, q-1);
Quick_Sort(A, q, r);
}
else
break;
}
#include<iostream>void Quick_Sort(int A[], int p ,int r)
{
if(p < r)
{
int q = Partition(A, p, r);
Quick_Sort(A, p, q-1);
Quick_Sort(A, q, r);
}
else
break;
}
试一下看。
#include <iostream>
#include <time.h>
using namespace std;
int Partition(int A[], int p, int r)
{
int x = A[r];//选择x=A[r]作为主元
int i = p -1;
for(int j = p; j <= r-1; j++)
if(A[j] <= x)//假设A[i]大于x,那么就不用移动了。第二个语句swap()将x移动到最左方,所以比x大的数都在右方。
{ //假设A[j]小于x,因为A[i]的下标i始终小于等于j,那么说明A[i]是大于x的值,否则便是被移动了。
i = i+1;//这样第一个函数swap()将把大于x的A[i]与小于x的A[j]互相交换位置。
std::swap(A[i], A[j]);
}
std::swap(A[i+1], A[r]);
return i+1;
}
void Quick_Sort(int A[], int p ,int r)
{
if(p < r)
{
int q = Partition(A, p, r);
Quick_Sort(A, p, q-1);
Quick_Sort(A, q, r);
}
}
int main(int argc, char* argv[])
{
srand(time(0));
const int max=20000;
int C[max];
for(int j=0;j <max;j++)
C[j]=j;
Quick_Sort(C, 0, max-1);
for(int i = 0; i < max; i++)
std::cout <<C[i] <<" ";
return 0;
}
078 16079 16080 16081 16082 16083 16084 16085 16086 16087 16088 16089 16090 1609
1 16092 16093 16094 16095 16096 16097 16098 16099 16100 16101 16102 16103 16104
16105 16106 16107 16108 16109 16110 16111 16112 16113 16114 16115 16116 16117 16
118 16119 16120 16121 16122 16123 16124 16125 16126 16127 16128 16129 16130 1613
1 16132 16133 16134 16135 16136 16137 16138 16139 16140 16141 16142 16143 16144
16145 16146 16147 16148 16149 16150 16151 16152 16153 16154 16155 16156 16157 16
158 16159 16160 16161 16162 16163 16164 16165 16166 16167 16168 16169 16170 1617
1 16172 16173 16174 16175 16176 16177 16178 16179 16180 16181 16182 16183 16184
16185 16186 16187 16188 16189 16190 16191 16192 16193 16194 16195 16196 16197 16
198 16199 16200 16201 16202 16203 16204 16205 16206 16207 16208 16209 16210 1621
1 1989
……
……这是我删除的数字
1 19892 19893 19894 19895 19896 19897 19898 19899 19900 19901 19902 19903 19904
19905 19906 19907 19908 19909 19910 19911 19912 19913 19914 19915 19916 19917 19
918 19919 19920 19921 19922 19923 19924 19925 19926 19927 19928 19929 19930 1993
1 19932 19933 19934 19935 19936 19937 19938 19939 19940 19941 19942 19943 19944
19945 19946 19947 19948 19949 19950 19951 19952 19953 19954 19955 19956 19957 19
958 19959 19960 19961 19962 19963 19964 19965 19966 19967 19968 19969 19970 1997
1 19972 19973 19974 19975 19976 19977 19978 19979 19980 19981 19982 19983 19984
19985 19986 19987 19988 19989 19990 19991 19992 19993 19994 19995 19996 19997 19
998 19999
Terminated with return code 0
Press any key to continue ...
#include <iostream >
#include <time.h >
using namespace std;
const int BOUND=8635;//8635就不行了
void QuickSort(int *a,int p,int r);
int main()
{
int *a=new int[BOUND];
srand(time(0));
int j;
for(j=0;j <BOUND;j++)
{
a[j]=rand()%9999;
}
QuickSort(a,0,BOUND-1);//////////////////////////////////////
QuickSort(a,0,BOUND-1);
cout << "Finish!";
return 0;
}
void QuickSort(int *a,int p,int r)///快速排序
{
if(p >=r)
return;
int temp,i,j;
int p1=p;
int r1=r;
do
{
for(i=r1;i >p1;i--)
{
if(a[p1] >a[i])
{
temp=a[p1];
a[p1]=a[i];
a[i]=temp;
break;
}
}
for(j=p1+1;j <i;j++)
{
if(a[i] <a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
break;
}
}
r1=i;
p1=j;
}
while(i >j);
QuickSort(a,p,i-1);
QuickSort(a,i+1,r);
}
#include "stdafx.h"
#include <iostream>
int Partition(int A[], int p, int r)
...{
int x = A[r];//选择x=A[r]作为主元
int i = p -1;
for(int j = p; j <= r-1; j++)
if(A[j] <= x)//假设A[i]大于x,那么就不用移动了。第二个语句swap()将x移动到最左方,所以比x大的数都在右方。
...{ //假设A[j]小于x,因为A[i]的下标i始终小于等于j,那么说明A[i]是大于x的值,否则便是被移动了。
i = i+1;//这样第一个函数swap()将把大于x的A[i]与小于x的A[j]互相交换位置。
std::swap(A[i], A[j]);
}
std::swap(A[i+1], A[r]);
return i+1;
}
void Quick_Sort(int A[], int p ,int r)
...{
if(p < r)
...{
int q = Partition(A, p, r);
Quick_Sort(A, p, q-1);
Quick_Sort(A, q, r);
}
}
int main(int argc, char* argv[])
...{
int C[12] = ...{100,4,8,7,6,32,5,4,8,1,2,1};
Quick_Sort(C, 0, 11);
for(int i = 0; i <= 11; i++)
std::cout<<C[i]<<" ";
return 0;
}