排序算法之快速排序
来源:互联网 发布:python ruby 哪个好 编辑:程序博客网 时间:2024/06/08 17:15
快速排序
思想:快速排序的思想更为深刻,随意选取一个数(一般选择a[0])作为基准值,然后在数组的左右两边设置两个哨兵,先让右边的哨兵进行巡逻,找到比基准值小的数;再让左边的哨兵进行巡逻,找到比基准值大的数,将两者交换。这里注意要先让右边的哨兵先出动。左右哨兵都找到后将找到的数据调换,就这样左右两个哨兵一直寻找一直调换,最后左右哨兵会相遇。由于总是右边的哨兵先寻找,所以最后找到的数字一定是比起始值小的数,这样就可以和起始的a[0]调换,这也就解释了为什么一定要右边的哨兵先移动。如果让左边的哨兵先移动,就会找到比起始值大的数,此时就不容易调换了。将起始值与相遇值调换之后,左右两侧再采用故技重施即可!
//给定数组快速排序,从小到大排列。
#include <stdio.h>
int a[10]={1,23,41,31,45,767,48,90,6,88};
void quicksort(int left,int right)
{
inti,j,temp,t;
if(left>right)
return;
i=left;
j=right;
temp=a[left];
while(i!=j)
{
while(a[j]>=temp&&j>i)
j--;
while(a[i]<=temp&&j>i)
i++;
if(j>i)
{
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()
{
intk;
printf("\nThesorted numbers are:\n");
quicksort(0,9);
for(k=0;k<10;k++)
{
printf("%5d",a[k]);
}
printf("\n\nend\n");
}
//给定数组快速排序,从小到大排列。
#include <stdio.h>
int p;
intk;
int a[1000];
void quicksort(int left,int right)
{
inti,j,temp,t;
if(left>right)
return;
i=left;
j=right;
temp=a[left];
while(i!=j)
{
while(a[j]>=temp&&j>i)
j--;
while(a[i]<=temp&&j>i)
i++;
if(j>i)
{
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()
{
for(p=0;p<1000;p++)
{ a[p]=1000-p;
}
printf("\nThe numbers are:\n");
for(k=0;k<1000;k++)
{
printf("%5d",a[k]);
}
printf("\n\nThesorted numbers are:\n");
quicksort(0,999);
for(k=0;k<1000;k++)
{
printf("%5d",a[k]);
}
printf("\n\nend\n");
}
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法 之 快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- c++经典题----统计一个文件“is”单词的个数
- String_Sequence(字符串的顺序存储)
- 排序算法之Shell排序(希尔排序)
- actionFrom和 actionMapping
- lintcode最多有多少个点在一条直线上
- 排序算法之快速排序
- DH实现加密算法
- python 学习心得(1)〖笨方法学python〗
- 排序算法之选择排序
- Sklearn 中的 GridSearchCV
- Hexo博客搭建之使用Hexo+GitHub搭建个人博客
- Java并发实战:CountDownLatch实现多线程抽题
- 斐波那契数列Fibonacci实现(递归、尾递归、循环)
- hiho 1014 trie树