排序算法大集锦_交换类——快速排序
2015-05-26 11:57
239 查看
感觉《算法导论》上面的那个例子要更容易理解,因为那个最起码比较直观!
#include <stdio.h>
int a[10]={2,8,5,7,4,3,1,9,6,10};
void QuickSort(int m, int n)
{
int s,begin,end;
if(m>n)
return;
begin=m;
end=n;
s=a[m];
while(begin!=end)
{
while(a[end]>=s && begin<end)
end--;
while(a[begin]<=s && begin<end)
begin++;
if(begin<end)
{
a[begin]=a[begin]^a[end];
a[end]=a[begin]^a[end];
a[begin]=a[begin]^a[end];
}
}
a[m]=a[begin];
a[begin]=s;
for(int t=0;t<10;t++)
printf("%d ",a[t]);
printf("\n");
QuickSort(m,begin-1);
QuickSort(end+1,n);
}
int main()
{
int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n排序后\n");
QuickSort(0,9);
printf("\n最终结果\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
运行之后
#include <stdio.h>
int a[10]={2,8,5,7,4,3,1,9,6,10};
void QuickSort(int m, int n)
{
int s,begin,end;
if(m>n)
return;
begin=m;
end=n;
s=a[m];
while(begin!=end)
{
while(a[end]>=s && begin<end)
end--;
while(a[begin]<=s && begin<end)
begin++;
if(begin<end)
{
a[begin]=a[begin]^a[end];
a[end]=a[begin]^a[end];
a[begin]=a[begin]^a[end];
}
}
a[m]=a[begin];
a[begin]=s;
for(int t=0;t<10;t++)
printf("%d ",a[t]);
printf("\n");
QuickSort(m,begin-1);
QuickSort(end+1,n);
}
int main()
{
int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n排序后\n");
QuickSort(0,9);
printf("\n最终结果\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
运行之后
相关文章推荐
- 排序算法之快速排序-Java-version
- 几种常见的排序算法,选择排序,冒泡排序,希尔排序,堆排序,快速排序,归并排序,基数排序的比较
- 排序算法之--快速排序
- 排序算法(交换排序)——快速排序
- 排序算法(五):快速排序
- PHP基础排序算法(四)快速排序
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- 排序算法 - 快速排序
- 浅析各类排序算法(三) 交换类排序之快速排序
- 排序算法之——快速排序
- 快速排序 常考排序算法
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- 3种排序算法的可视化 冒泡排序 选择排序 快速排序 转自自己另一个帐号
- 【排序算法】——快速排序
- Java-时间复杂度为O(nlogn)的排序算法(快速排序, 归并排序, 堆排序, 希尔排序)
- 排序算法(三)、交换排序 —— 冒泡排序 和 快速排序
- MIT:算法导论——4.2快速排序 以及 排序算法时间复杂度分析
- 排序算法,快速排序,希尔排序,冒泡排序
- 排序算法大集锦_选择类——直接选择排序
- 常用排序算法实现[交换排序之冒泡排序、快速排序]