标签:
快速排序基本上有如下版本
一、国内教材双向扫描版
二、单向扫描版本
三、随机化版本
四、三数取中分割法
五、非递归版
这里给我前两个版本(较为常用)
版本一:
双向扫描版本:
如图:
代码如下:
//快速排序(版本一)
//带枢轴
//杨鑫
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int a[MAXN + 1], n;
void QuickSort(int left, int right)
{
int i, j, t, temp;
if(left > right)
return;
temp = a[left];
i = left;
j = right;
while(i != j)
{
while(a[j] >= temp && i < j)
{
j--;
}
while(a[i] <= temp && i < j)
{
i++;
}
if(i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
QuickSort(left, i - 1);
QuickSort(i + 1, right);
}
int main()
{
printf("=========快速排序版本一==========\n");
int i = 0, j, t, count = 0;
int T;
printf("请输入要对数据排序的个数:\n");
scanf("%d", &T);
while(T--)
{
scanf("%d", &a[i]);
i++;
}
QuickSort(0, i - 1);
printf("排序后的数据是:\n");
for(j = 0; j < i; j++)
{
printf("%d ", a[j]);
}
return 0;
}
版本二:
单项扫描:
void quickSort2(int x[], int l, int r)
{
if(l >= r)
return;
int m = l;
for(int i = l + l; i <= r; i++ )
{
if(x[i] < x[l])
{
swap2(x[++m], x[i]);
}
}
swap2(x[l], x[m]);
quickSort2(x, l, m - 1);
quickSort2(x, m + 1, r);
}
void swap2(int &a,int &b)
{
if(a==b) return;//对同一地址的数据交换,会使其结果为0
a=a^b;
b=a^b;
a=a^b;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012965373/article/details/48292695