已知线性表按顺序存储于内存,每个元素都是整数,用最少时间把所有值为负数的元素移到全部正数值元素前面的算法。
#include <iostream>
using namespace std;
# define N 5 //设置线性表的阈值
typedef struct
{
int data[N+1]; //预留0号位置 作为哨兵
int len;
}SeqList; //定义一个线性 顺序表
void print(SeqList L) //打印运行结果
{
int i;
for (i = 1; i<=L.len; i++)
printf("%d,", L.data[i]);
printf("\n");
}
void swap(SeqList *l,int low,int high) { //交换两个数据
int temp;
temp = l->data[low];
l->data[low] = l->data[high];
l->data[high] = temp;
}
void divide(SeqList *l,int low ,int high) { //进行分割处理 l 1 5
while (low < high) {
while (low < high && l->data[high]>=0)
high--;
while (low < high && l->data[low] < 0)
low++;
swap(l, low, high);
}
}
int main(int argc,char *argv[]) {
int data [] = { 10,-1,5,8,-3 };
SeqList s1;
for (int i = 0; i < 5; i++) {
s1.data[i+1] = data[i];
}
s1.len = N;
cout << "分割前:==" << endl;
print(s1);
cout << "分割后:==" << endl;
divide(&s1,1,s1.len);
print(s1);
system("pause");
return 0;
}