关于奇偶交换排序的一道题,求高手解答
											奇偶交换排序如下所述:第一趟对所有奇数i,将a【i】和a【i+1】比较;第二趟对所有的偶数i,将a【i】和a【i+1】比较。。(比较过程中若a【i】>a【i+1】,则将两者交换),第三趟对奇数i,第四趟对偶数i。。。以此类推直到整个序列有序为止。(1):试问这种排序方法的结束条件是什么?
(2):分析当初始序列为正序或逆序两种情况下,奇偶交换排序过程中所需进行的关键字比较的次数。
这道题我想了很久都未有作出来,求高手解答呀
 程序代码:
程序代码:#include <stdio.h>
#define MAX_SIZE 20
typedef enum { false, true }bool;
/*
 *获取控制台的输入
 */
bool get_inputs(int array[], unsigned int *size)
{
    printf("输入数组:");
    while (scanf("%d", &array[(*size)]))
    {
        ++(*size);
    }
    if ((*size)>MAX_SIZE)
    {
        return false;
    }
    return true;
}
/*
 *奇数下标元素开始的进行调整
 */
bool odd_sort(int array[], unsigned int size)
{
    unsigned int i;
    bool odd_flag = true;//奇数标志 
    for (i=1; i+1<size; i=i+2)
    {
        if (array[i] > array[i+1])
        {
            array[i] = array[i+1] + array[i];
            array[i+1] = array[i] - array[i+1];
            array[i] = array[i] - array[i+1];
            odd_flag = false;
        }
    }
    return odd_flag;
}
/*
 *偶数下标元素开始的进行调整
 */
bool even_sort(int array[], unsigned int size)
{
    unsigned int i;
    bool even_flag = true;//偶数标志
    for (i=0; i+1<size; i=i+2)
    {
        if (array[i] > array[i+1])
        {
            array[i] = array[i+1] + array[i];
            array[i+1] = array[i] - array[i+1];
            array[i] = array[i] - array[i+1];
            even_flag = false;
        }
    }
    return even_flag;
}
/*
 *输出整个的数组
 */
void display(int array[], unsigned int size)
{
    unsigned int i;
    for (i=0; i<size; ++i)
    {
        printf("%d ", array[i]);
    }
    printf("\n\n");
}
void function()
{
    int array[MAX_SIZE] = {0};
    unsigned int size = 0;//表示数组的长度
    if (!get_inputs(array, &size))
    {
        return;
    }
    while (!odd_sort(array, size) || !even_sort(array, size));
    display(array, size);
}
int main(void)
{
    function();
    return 0;
}
										
					
	 程序代码:
程序代码:#include <stdio.h>
#define MAX_SIZE 20
#define COUT printf("%d\n", counter++)
typedef enum { false, true }bool;
unsigned int counter = 0;
/*
 *获取控制台的输入
 */
bool get_inputs(int array[], unsigned int *size)
{
    printf("输入数组:");
    while (scanf("%d", &array[(*size)]))
    {
        ++(*size);
    }
    if ((*size)>MAX_SIZE)
    {
        return false;
    }
    return true;
}
/*
 *奇数下标元素开始的进行调整
 */
bool odd_sort(int array[], unsigned int size)
{
    unsigned int i;
    bool odd_flag = true;//奇数标志 
    for (i=1; i+1<size; i=i+2)
    {
        if (COUT, array[i] > array[i+1])
        {
            array[i] = array[i+1] + array[i];
            array[i+1] = array[i] - array[i+1];
            array[i] = array[i] - array[i+1];
            odd_flag = false;
        }
    }
    return odd_flag;
}
/*
 *偶数下标元素开始的进行调整
 */
bool even_sort(int array[], unsigned int size)
{
    unsigned int i;
    bool even_flag = true;//偶数标志
    for (i=0; i+1<size; i=i+2)
    {
        if (COUT, array[i] > array[i+1])
        {
            array[i] = array[i+1] + array[i];
            array[i+1] = array[i] - array[i+1];
            array[i] = array[i] - array[i+1];
            even_flag = false;
        }
    }
    return even_flag;
}
/*
 *输出整个的数组
 */
void display(int array[], unsigned int size)
{
    unsigned int i;
    for (i=0; i<size; ++i)
    {
        printf("%d ", array[i]);
    }
    printf("\n\n");
}
void function()
{
    int array[MAX_SIZE] = {0};
    unsigned int size = 0;//表示数组的长度
    if (!get_inputs(array, &size))
    {
        return;
    }
    while (!odd_sort(array, size) || !even_sort(array, size));
    display(array, size);
}
int main(void)
{
    function();
    return 0;
}
	
		
			
		
	
							
	 
										
					
	