|
4鱼币
/*----------------------本算法有误,请各位检查并帮助修改-------------------*/
//编写一个算法,将数组a中所有负数移到整数之前,且时间复杂度是 O(n)。
//例如:{1, 2, 3, 4, -1, 1, -2, -1, -4} --> {-4, -1, -2, -1, 4, 1, 3, 2, 1}
#include <stdio.h>
void Func(int list[], int n){
int i=0, j=n-1, temp, k;
int *List;
while( i < j ){
while (list[i]<0) i++;
while (list[j]>0) j--;
if( list[i] > list[j] ){
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
for( k=0; k<n; k++ ){
List[k] = list[k];
printf("%d", List[k]);
}
return;
}
int main(){
int a[9] = {1, 2, 3, 4, -1, 1, -2, -1, -4};
Func(a, 9);
return 0;
}
本帖最后由 人造人 于 2018-8-14 17:10 编辑
这次应该没问题了
//编写一个算法,将数组a中所有负数移到整数之前,且时间复杂度是 O(n)。
//例如:{1, 2, 3, 4, -1, 1, -2, -1, -4} --> {-4, -1, -2, -1, 4, 1, 3, 2, 1}
#include <stdio.h>
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void Fun(int data[], int len)
{
int dest = 0;
for(int i = 0; i < len; ++i)
{
if(data[i] < 0)
{
Swap(&data[i], &data[dest++]);
}
}
}
void Print(int data[], int len)
{
for(int i = 0; i < len; ++i)
{
printf("%d ", data[i]);
}
printf("\n");
}
int main(void)
{
int a[9] = {1, 2, 3, 4, -1, 1, -2, -1, -4};
//Func(a, 9);
Fun(a, 9);
Print(a, 9);
return 0;
}
|
|