快排——全称快速排序(Quick Sort)改进自冒泡排序(Bubble Sort),是效率最高的排序算法之一。而排序在计算机编程中又应用非常的广泛。所以从快排开始学习显然是非常合理的。
首先谈谈快排的原理吧(冒泡的原理非常的简单这里就不多谈了,但是学习快排之前首先了解冒泡的原理貌似还是非常有必要的)。快排的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(摘自百度百科)。所以首先,也是最重要的部分是怎么通过一趟排序来把数据分割成大小分明的两个部分。。。在这里我们可以采取两个浮标:i,j。i从头往尾移动,j从尾往头移动。步骤如下:
一、定义第一个数(也同时是i指向的数)为参照物value,简称val。移动j,到第一个比val小的数时,令a[i]=a[j]。
二、向后移动i,找到第一个比val大的数时,令a[j]=a[i],a[i]=value.
三、重复步骤一和二,直到i=j,即此时的val前面的所有数都比value小,而后面的所有数都比value大
四、再对val的前后两个区间使用同样的方法进
#include<stdio.h>
char QuickSort(char a[],int numsize) //a是整形数组,numsize是元素个数
{
int i=0,j=numsize-1;
int val=a[0]; //指定参考值val大小
if(numsize>1) //确保数组长度至少为2,否则无需排序
{
while(i<j) //循环结束条件
{
//从后向前搜索比val小的元素,找到后填到a[i]中并跳出循环
for(;j>i;j--)
if(a[j]<val)
{
a[i]=a[j];
break;
}
//从前往后搜索比val大的元素,找到后填到a[j]中并跳出循环
for(;i<j;i++)
if(a[i]>val)
{
a[j]=a[i];
break;
}
}
a[i]=val; //将保存在val中的数放到a[i]中
QuickSort(a,i); //递归,对前i个数排序
QuickSort(a+i+1,numsize-1-i); //对i+1到numsize-1这numsize-1-i个数排序
}
return *a;
}
int main(void)
{
int i=0,numsize;
char a[1024];
printf("请输入需要进行排序的数字,按回车结束:");
while((a[i]=getchar())!='\n')
{
// numsize=i;
i++;
numsize=i;
}
QuickSort(a,numsize);
printf("排序完成,排序后的数字:");
i=0;
for(i=0;i<numsize;i++)
printf("%c ",a[i]);
printf("\n");
return 0;
}
行分割。并递归