#include <stdio.h>
#include <stdlib.h>
/**********************************/
/*顺序表的头文件,文件名sequlist.h*/
/**********************************/
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;
/**********************************/
/*函数名称:inputfromfile() */
/*函数功能:从文件输入顺序表 */
/**********************************/
void inputfromfile(sequence_list *L,char *f)
{ int i,x;
FILE *fp=fopen(f,"r");
L->size=0;
if (fp)
{ while ( ! feof(fp))
{
fscanf(fp,"%d",&L->a[L->size++]);
}
fclose(fp);
}
}
/**********************************/
/*函数名称:print() */
/*函数功能:输出顺序表 */
/**********************************/
void print(sequence_list *L)
{ int i;
for (i=0;i<L->size;i++)
{ printf("%5d",L->a[i]);
if ((i+1)%10==0) printf("\n");
}
printf("\n");
}
/*
请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
所有偶数调整到表的右边,并分析算法的时间复杂度。
*/
void partion(sequence_list *L)
{
int i=0,j=L->size-1;
while(i<j){
while(L->a[i]%2&&i<j) i++; // 从左边开始,如果L->a[i]是奇数;寻找下一个;
while(L->a[j]%2==0&&i<j) j--; // 从右边开始,如果L->a[j]是偶数,寻找下一个;
if(L->a[i]%2==0){ // 找到左边的偶数,右边的奇数,那么就进行交换;
int temp=L->a[j];
L->a[j]=L->a[i];
L->a[i]=temp;
}
}
}
int main()
{
sequence_list L;
inputfromfile(&L,"C:\\3.txt");
print(&L); /*输出表L*/
partion(&L);
print(&L); /*输出新表*/
return 0;
#include <stdlib.h>
/**********************************/
/*顺序表的头文件,文件名sequlist.h*/
/**********************************/
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;
/**********************************/
/*函数名称:inputfromfile() */
/*函数功能:从文件输入顺序表 */
/**********************************/
void inputfromfile(sequence_list *L,char *f)
{ int i,x;
FILE *fp=fopen(f,"r");
L->size=0;
if (fp)
{ while ( ! feof(fp))
{
fscanf(fp,"%d",&L->a[L->size++]);
}
fclose(fp);
}
}
/**********************************/
/*函数名称:print() */
/*函数功能:输出顺序表 */
/**********************************/
void print(sequence_list *L)
{ int i;
for (i=0;i<L->size;i++)
{ printf("%5d",L->a[i]);
if ((i+1)%10==0) printf("\n");
}
printf("\n");
}
/*
请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
所有偶数调整到表的右边,并分析算法的时间复杂度。
*/
void partion(sequence_list *L)
{
int i=0,j=L->size-1;
while(i<j){
while(L->a[i]%2&&i<j) i++; // 从左边开始,如果L->a[i]是奇数;寻找下一个;
while(L->a[j]%2==0&&i<j) j--; // 从右边开始,如果L->a[j]是偶数,寻找下一个;
if(L->a[i]%2==0){ // 找到左边的偶数,右边的奇数,那么就进行交换;
int temp=L->a[j];
L->a[j]=L->a[i];
L->a[i]=temp;
}
}
}
int main()
{
sequence_list L;
inputfromfile(&L,"C:\\3.txt");
print(&L); /*输出表L*/
partion(&L);
print(&L); /*输出新表*/
return 0;
}
核心算法转自:http://blog.csdn.net/wlxsq/article/details/50383077