#include
void CelerityRun(int left, int right, int array[ ]);
/*
2020年7月29日17:09:16
为数组元素赋值:
a[0]= 8
a[1]= 14
a[2]= 13
a[3]= 158
a[4]= 45
a[5]= 15
a[6]= 125
a[7]= 95
a[8]= 66
a[9]= 12
8 12 13 14 15
45 125 95 66 158
Press any key to continue
折中法排序数组 运行结果
*/
int main()
{
int i;
int a[10];
printf ("为数组元素赋值: \n");
/*通过键盘为数组元素赋值*/
for (i=0; i<10;i++)
{
printf ("a[%d]= ", i);
scanf ("%d",&a[i]);
}
/*从小到大排序*/
CelerityRun(0,9,a);
/*输出数组*/
for (i=0; i<10; i++)
{
printf ("%d\t",a[i]); /*输出制表位*/
if (i==4)
printf("\n");
}
printf("\n");
return 0;
}
void CelerityRun(int left, int right, int array[])
{
int i, j;
int middle, iTemp;
i =left;
j =right;
middle =array[(left+right)/2] ; /*求中间值*/
do
{
while ( (array[i] < middle) && (i /*从左找小于中间值的数 &&逻辑与 全1为1 有0为0 */
i++;
while ( (array[j] > middle) && (j>left) )
/*从右找小于中间值的数*/
j--;
if (i<=j) /*找到一对值*/
{
iTemp =array[i];
array[i]=array[j];
array[j]=iTemp;
i++;
j--;
}
}while (i<=j); /*如果两边的下标交错;就停止(完成一次)*/
/*递归完成左半边*/
if (left<j)
CelerityRun(left,j,array);
/*递归完成右半边*/
if (left>i)
CelerityRun(i,right,array);
}
/*递归完成右半边*/
if (left>i)
CelerityRun(i,right,array);
递归条件有问题