黑马程序员技术交流社区
标题:
快速排序整理
[打印本页]
作者:
Beacon
时间:
2014-10-23 14:20
标题:
快速排序整理
整理了一下快速排序。。。 大家一起学习!!!
void sort(int arr[], int l, int r)
{
int i = l;
int j = r;
int x = arr[i];
if(l < r)
{
while(i < j)
{
while((i<j) && (arr[j]>x))
j--;
arr[i] = arr[j];
while((i<j) && (arr[i]<x))
i++;
arr[j] = arr[i];
}
arr[i] = x;
sort(arr, l, i-1);
sort(arr, i+1, r);
}
}
int main()
{
int i;
int arr[] = {18, 2, 15, 29, 12, 60};
sort(arr, 0, 5);
for(i = 0; i < 6; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
复制代码
作者:
魔法少年十三
时间:
2014-10-23 22:55
这个输出语句明显是c++
作者:
弹琴骚年
时间:
2014-10-23 23:49
我记得好像还有更快的快排语句。。
作者:
崔石炫
时间:
2014-10-24 09:35
这不是递归排序么?
作者:
菜鸟_琦
时间:
2014-10-24 10:12
快排
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
/*
快速排序算法的两个主要步骤,分割(Partition和QuickSort)
*/
int Partition(int A[],int p,int q);
int QuickSort(int A[],int p,int q);
int test();
int main()
{
test();
return 0;
}
/*
一个很简单的测试函数
*/
int test()
{
int a[MAX];
int i;
srand((int)time(0));
for(i = 0;i<MAX;i++)
{
a[i] = rand();
}
for(i = 0;i<MAX;i++)
printf("%d\t",a[i]);
printf("\n");
QuickSort(a,0,MAX-1);
for(i = 0;i<MAX;i++)
printf("%d\t",a[i]);
printf("\n");
}
/*
Partition步骤中哨兵选取的是最后一个元素作为哨兵
*/
int Partition(int A[],int p,int q)
{
int i,j,x,t;
x = A[q];
i = p-1;
for (j = p;j<=q;j++)
if(A[j] < x)
{
i++;
t = A[j];
A[j] = A[i];
A[i] = t;
}
A[q] = A[i+1];
A[i+1] = x;
return i+1;
}
/*
递归调用的QuickSort程序
*/
int QuickSort(int A[],int p,int r)
{
if(p<r)
{
int q = Partition(A,p,r);
QuickSort(A,p,q-1);
QuickSort(A,q+1,r);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2