快速排序是一种不稳定排序,它的时间复杂度为O(n·lgn),最坏情况为O(n2);空间复杂度为O(n·lgn)。
这种排序方式是对于冒泡排序的一种改进,它采用分治模式,将一趟排序的数据分割成独立的两部分,其中一组数据的每个值都小于另一组。每一趟在进行分类的同时实现排序。
其中每一趟的模式通过设置key当基准元素,key的选择可以是数据的第一个,也可以是数据的最后一个。这里以每次选取数据的第一个为例:
另外,关于C/C++编程学习,小编给大家提供一个学习.交.流群,欢迎到访:569268376
具体代码实现:
#include<stdio.h>
#define N 6
int fun(int arr[],int low,int high)
{
int key;
key=arr[low];
while(low<high)
{
while(low<high && arr[high]>=key)
high–;
if(low<high)
arr[low++]=arr[high];
while(low<high && arr[low]<=key)
low++;
if(low<high)
arr[high–]=arr[low];
}
arr[low]=key;
return low;
}
void quick_sort(int arr[],int start,int end)
{
int pos;
if(start<end)
{
pos=fun(arr,start,end);
quick_sort(arr,start,pos-1);
quick_sort(arr,pos+1,end);
}
}
int main()
{
int i;
int arr[N]={32,12,7,78,23,45};
for(i=0;i<N;i++)
{
printf(“%d “,arr[i]);
}
printf(“n”);
quick_sort(arr,0,N-1);
for(i=0;i<N;i++)
{
printf(“%d “,arr[i]);
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。