快速排序时间复杂度为O(nlogn),是数组相关主题中经常用到的算法。下面这篇文章主要介绍C语言实现快速排序的相关信息,有需要的朋友可以参考一下。
首先我们要对一组数据进行排序:
在数组中选择一个参考号(通常是数组中的第一个,用黄色圆圈标记);
将数组中小于引用号的数据移到引用号的左侧,将大于引用号的数据移到右侧。如何移动它,以后再说;
对于参考号左右两侧的数组,连续重复上述两个过程,直到每个子集只有一个元素,即全部有序。
好了,咱们开始吧!
快速排序需要两个哨兵,I和J,分别指向数组的头和尾。接下来就是搬家了。
通常我们选择第一个元素作为参考号,移动数组元素到达这个参考号。左边比它小,右边比它大。开始移动I和J,I和J交互移动。这里我们需要先移动J。这是为什么呢?原因是先移动J,当这一行移动到尽头,I的下一个是J的时候,我们就先移动J,这样可以避免错误的移动数据。以后会有经验的。
当你移动J时,你开始比较J是否大于参考数。如果大于等于J—,否则就看I,如果I小于等于6,就和参考数比较I。不然我就和j指的值互换了,我们看上面这个。
第一步:看到J的值小于6,再看I,I的值是6,所以I,后面的I继续,4,3,5都小于6,所以I移动到7以下。
此时,j指向的值应该与I指向的值互换.
完成交换,然后比较J指向的位置是否大于参考数。如果更大,J-;
这里,7,9,都大于6,所以J—,做两次,J达到4以下。
4小于6,所以再看I,I指向0,所以需要I,1到1的时候也小于6,所以还是需要。这里我指的是和J一样的数字4,
那么i=j,不能满足条件,只好把I指向的数和参考数交换,这一轮比较就结束了。
这里基准数6的左边小于6,右边大于6。我们据此开始参考数字6的左右对比。
后来就这样找,然后把第一个元素分别排序为左右两边的参考号。
以此类推,就好了,我把代码贴上。
#包含stdio.h
#定义尺寸6
//快速排序
void quick_sort(int num[],int low,int high)
{
int i,j,temp
int tmp
i=低;
j=高;
tmp=num[low];//指定为中间分割线,左边比他小,右边比他大。通常,第一个元素是基准数。
If(i j) //如果下标I大于下标j,函数结束运行
{
返回;
}
而(我!=j)
{
while(num[j]=tmp j i)
{
j-;
}
while(num[i]=tmp j i)
{
我;
}
如果(j i)
{
temp=num[j];
数字[j]=数字[I];
num[I]=temp;
}
}
num[low]=num[I];
num[I]=tmp;
quick_sort(num,low,I-1);
quick_sort(num,i 1,high);
}
int main(int argc,char **argv)
{
//创建一个数组
int num[SIZE]={ 0 };
int I;
//输入一个数字
for(I=0;I尺寸;我)
{
scanf('%d ',num[I]);
}
quick_sort(num,0,SIZE-1);
for(I=0;I尺寸;我)
{
printf(' %d ',num[I]);
}
返回0;
}
总结
这就是这篇关于快速排序的C语言实现的文章。更多相关C语言快速排序内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。