快速排序
标签:amp 快速 void 代码 isa return while -- pre
快速排序:
1. 样例求解:5 7 10 6 9 4 3 8
2. i要从基数开始,因为如果对于要排序的一个区间,基数恰好就是最小的那个数,那么它对于后面的排序无影响,整个过程不需要交换,当时由代码的思想需要将基数调到小于它的数的右边,如果从基数后面的数开始遍历,那么当基数为最小值时,也会出现基数后面的数和基数交换的情况,所以要从基数开始。
3. 不能先从i开始遍历,因为如果从i开始遍历由下标i累加的条件,i至少会先累加一,但是如果基数也就是最开始下标i所对应的数恰好是区间最小值,i实际上不需要变话,如果从j开始,在这种情况下,j会递减到i为止,循环将会停止,返回基数的下标。
#include#define maxn 2000
#pragma warning(disable:4996)
using namespace std;
int f[maxn];
int n;
void swap(int a[], int x, int y)
{
int t = a[x];
a[x] = a[y];
a[y] = t;
}
int part(int a[],int l,int r)
{
int i = l, j = r-1;
int x = a[l];
while (i != j)
{
while (a[j] > x && i ;
while (a[i] ;
if (i j)
{
swap(a, i, j);
}
}
a[l] = a[j];
a[j] = x;
return j;
}
void q_sort(int a[], int l, int r)
{
if (r - l 1) return;
int x = part(a, l, r);
q_sort(a, l, x);
q_sort(a, x + 1, r);
return;
}
int main()
{
scanf("%d",&n);
for (int i = 0; i )
scanf("%d",f+i);
q_sort(f, 0, n);
for (int i = 0; i )
printf("%d ",f[i]);
getchar();
getchar();
return 0;
}
快速排序
标签:amp 快速 void 代码 isa return while -- pre
原文地址:https://www.cnblogs.com/zxzmnh/p/11573787.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
快速排序
文章链接:http://soscw.com/essay/34823.html
评论