要求能正确执行——
(1)输入:1,5,0,3,6
输出:0,1,3,5,6
(2)输入:18,38,23,456,1,35,97,23
输出:1,18,23,23,3538,97,456
#include <stdio.h>
#include <string.h>
void quicksort(int arr[], int _left, int _right)
{
int left = _left;
int right = _right;
int temp = 0;
if(left <= right)
{
temp = arr[left]; //找出基准元素
while(right != left)
{
while(right > left && arr[right] >= temp)
{
right--;
}
arr[left] = arr[right]; //从右向左找出第一个小于基准元素的值
while(left < right && arr[left] <= temp)
{
left++;
}
arr[right] = arr[left]; //从左向右找出第一个大于基准元素的值
}
arr[left] = temp;
quicksort(arr, _left, left-1); //把基准元素之前的元素重新排列
quicksort(arr, right+1, _right); //把基准元素之后的元素重新排列
}
}
void str_to_int(char a[], int len)
{
int i = 0, j = 0, sum = 0, flag = 0;
char *p = NULL;
int array_a[128] = {0};
int len_array_a = 0;
for(i = 0;i < len;i++)
{
p = &a[i];
if(*p >= '0' && *p <= '9')//统计整数
{
sum = sum*10 + (*p - '0');
flag = 1;
}
if(*p < '0' || *p > '9')//把整数存入数组
{
if(flag == 1)
{
array_a[j] = sum;
j++;
}
sum = 0;
flag = 0;
}
if(*p >= '0' && *p <= '9' && i == len - 1)
{
array_a[j] = sum;
j++;
}
len_array_a = j;//统计数组的元素个数
}
quicksort(array_a, 0, len_array_a - 1);
for(i = 0;i < len_array_a; i++)
{
printf("%d ",array_a[i]);
}
}
int main()
{
char ch[128];
gets(ch);
str_to_int(ch,strlen(ch));
}