将所有小小于0的元素移到大于0的前面
#include <iostream>
#include <stdlib.h>
using namespace std;
#define MaxSize 10
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
void InitiList(SqList *&L,ElemType a[],int n);//初始化顺序表
void DisplayList(SqList *L);//显示顺序表
void ChaListItem(SqList *L);//将所有小小于0的元素移到大于0的前面
int main()
{
SqList *L=new SqList();
ElemType a[]={1,-5,3,4,-8,-5};
InitiList(L,a,6);
DisplayList(L);
cout<<endl;
ChaListItem(L);
DisplayList(L);
return 0;
}
void DisplayList(SqList *L)//显示顺序表
{
for(int i=0;i<L->length;i++)
cout<<L->data[i]<<" ";
}
void InitiList(SqList *&L,ElemType a[],int n)//初始化顺序表
{
L = (SqList*)malloc(sizeof(SqList));
for(int i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
关键算法:
void ChaListItem(SqList *L)//将所有小小于0的元素移到大于0的前面
{
int i,j;
i=j=0;
int temp;
for(j = 0;j < L->length;j++)
{
if(L->data[j] <= 0) //将小于0的数据存在array[i]起的数组里,i从0开始
{
temp = L->data[i];
L->data[i]=L->data[j];
L->data[j]=temp;
i++;
}
}
}
时间复杂度为O(n)
结果事例如下: