zoukankan      html  css  js  c++  java
  • 将一组整数数组中的数字按负数在前,零在中间,正数在末尾摆放。

    将一组整数中的数字按负数在前,零在中间,正数在末尾摆放。

    美团电话面试程序题:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    /*
     *将一组整数排成负数,0,整数 
     */
     void swap(int *x,int *y){
     	int temp=*x;
     	*x=*y;
     	*y=temp;
     }
     void print(int a[],int n){
    	int i; 	
    	 for(i=0;i<n;i++){
     		printf("%d , ",a[i]);
    	 }
     }
    int main(int argc, char *argv[]) {
    	/*
    	printf("输入整数的个数");
    	int n;
    	int *a;
    	scanf("%d
    ",&n);
    	printf("输入%d个整数",n);
    	for(int i=0;i<n;i++){
    		scanf("%d",*(a+i));
    	}
    	*/
    	int i;
    	int a[18]={0,3,6,4,-1,0,-2,0,4,7,-3,6,0,1,-4,1,0,0};
    	int *p,*q,*r,*k;
    	p=a;q=p+18-1;
    	while(p<q){
    		if(*p<0){
    			p++;
    		}else{
    			if(*q>=0){
    				q--;
    			}else if(*q<0){
    				swap(p,q);
    				q--;
    			}
    		}
    	}
    	print(a,18);
    	k=p;
    	r=a+17;
    	while(k<r){
    		if(*k>0){
    			if(*r==0){
    				swap(k,r);
    				k++;
    			}else{
    				r--;
    			}
    		}else{
    			k++;
    		}
    	}
    	print(a,18);
    	getchar();
    	return 0;
    }
    

      第一次循环将负数排到前面,第二次循环将0排到负数后面,时间复杂度O(p)+ O(n-p)=O(N),空间复杂度O(1)

  • 相关阅读:
    java学习笔记(5)
    java学习笔记(4)
    java学习笔记(3)
    java学习笔记(2)
    java学习笔记(1)
    很棒的Nandflash资料
    Tx2440_Lcd
    git-github学习心得
    多文档编辑器
    假设检验
  • 原文地址:https://www.cnblogs.com/cc-jony/p/4061012.html
Copyright © 2011-2022 走看看