数据结构算法之快速排序
2017-03-02 14:29
260 查看
快速排序的基本思路是从n个待排序的记录中任取一个记录,(不妨取第一个元素)设法将该记录放置于排序后他会最终应放的位置。使它前面的记录排序码都小于它的值,是它后面的都大于它的值。然后对前后两部分都重复这个过程。其基本思想是算法中的分治思想。
为了节省空间,可以不另开辟一个新的数组存储区,先将第1个记录暂存,设为想,这样就空出了第一个元素的位置,从第n个元素起找一个排序码不大于x的记录,将它放在第一个位置,这样,后面又空出来一个位置,从第二个元素起找一个排序码大于x的元素,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以把所有大于x的数放在x的后面。把所有小于x的数放在前面,最后当两边逼近同一位置时,便将暂存的x放于该位置。
对前后两个部分递归使用上述操作,排序即可完成。
附代码如下:#include <stdio.h>
#include <stdlib.h>
void sort(int *a,int low,int hig)
{
int i,j;
if(low<hig)
{
i=low;
j=hig;
a[0]=a[i];
do
{
while(a[j]>a[0]&&i<j)j--;
if(i<j)
{
a[i]=a[j];i++;
}
while(a[i]<a[0]&&i<j)i++;
if(i<j)
{
a[j]=a[i];j--;
}
}while(i!=j);
a[i]=a[0];
sort(a,low,i-1);
sort(a,i+1,hig);
}
}
int main()
{
int i;
int low,hig;
int a[11] = {8,3,10,9,2,4,3,6,8,11,7};
low=1;hig=10;
sort(a,low,hig);
for(i=1;i<=10;i++)
{
printf("%3d",a[i]);
}
return 0;
}
为了节省空间,可以不另开辟一个新的数组存储区,先将第1个记录暂存,设为想,这样就空出了第一个元素的位置,从第n个元素起找一个排序码不大于x的记录,将它放在第一个位置,这样,后面又空出来一个位置,从第二个元素起找一个排序码大于x的元素,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以把所有大于x的数放在x的后面。把所有小于x的数放在前面,最后当两边逼近同一位置时,便将暂存的x放于该位置。
对前后两个部分递归使用上述操作,排序即可完成。
附代码如下:#include <stdio.h>
#include <stdlib.h>
void sort(int *a,int low,int hig)
{
int i,j;
if(low<hig)
{
i=low;
j=hig;
a[0]=a[i];
do
{
while(a[j]>a[0]&&i<j)j--;
if(i<j)
{
a[i]=a[j];i++;
}
while(a[i]<a[0]&&i<j)i++;
if(i<j)
{
a[j]=a[i];j--;
}
}while(i!=j);
a[i]=a[0];
sort(a,low,i-1);
sort(a,i+1,hig);
}
}
int main()
{
int i;
int low,hig;
int a[11] = {8,3,10,9,2,4,3,6,8,11,7};
low=1;hig=10;
sort(a,low,hig);
for(i=1;i<=10;i++)
{
printf("%3d",a[i]);
}
return 0;
}
相关文章推荐
- 算法与数据结构(十六) 快速排序(Swift 3.0版)
- 数据结构与算法-快速排序
- 数据结构与算法之快速排序
- 浅析数据结构与算法4--快速排序
- 数据结构与算法之快速排序
- 数据结构与算法之一快速排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 数据结构与算法之快速排序
- 【数据结构与算法】排序算法——快速排序
- 【数据结构与算法】快速排序
- [数据结构与算法]快速排序的优化实现(取中位数)
- 数据结构——快速排序原理及算法Java实现
- 算法与数据结构基础(四)高级排序算法2.快速排序
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 数据结构与算法之--高级排序:shell排序和快速排序
- 数据结构与算法问题 快速排序
- 数据结构与算法(二)
- 数据结构与算法之递归算法
- 数据结构与算法笔记:二