|
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;
- }
复制代码
|
|