数据结构(C语言版) 串数组和广义表 算法设计Demo6
Posted Aiden (winner)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 串数组和广义表 算法设计Demo6相关的知识,希望对你有一定的参考价值。
设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂度为0(n))。
[题目分析]
本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。然后i和j所指数据交换,继续以上过程,直到i=j为止。
[算法描述]
void Arrange(int A[],int n)
//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面
int i=0,j=n-1,x; //用类C编写,数组下标从0开始
while(i<j)
while(i<j && A[i]>0)
i++;
while(i<j && A[j]<0)
j--;
if(i<j)
x=A[i];
A[i++]=A[j];
A[j--]=x;
//交换A[i] 与A[j]
// while(i<j)
//算法Arrange结束.
[算法讨论]
对数组中元素各比较一次,比较次数为n。最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前面)发生n/2次交换。用类c编写,数组界偶是0…n-1。空间复杂度为O(1)。
以上是关于数据结构(C语言版) 串数组和广义表 算法设计Demo6的主要内容,如果未能解决你的问题,请参考以下文章