前言:把一堆整数负数排在左边非负数排在右边
思想:
从两端同时扫描待排序列,左边的关键字为负数的时候则扫描下一个关键字;直到第一个非负数,同理扫描右端的关键字;
把两端的关键字进行相应的交换的操作,直到左右扫描的索引碰头
代码:
1 /** 2 把负数放到左边非负数放到右边 3 4 @param R 待排数组 5 @param len 数组中关键字的个数 6 */ 7 void negative0Positive0(int R[],int len); 8 void negative0Positive0(int R[],int len){ 9 10 int i = 0; 11 int j = len-1; 12 int temp; 13 14 for(;i<j;++i,--j){ 15 16 while (i< j && R[i] < 0) { 17 ++i; 18 } 19 20 temp = R[i]; 21 22 while (i < j && R[j] >= 0) { 23 --j; 24 } 25 26 R[i] = R[j]; 27 R[j] = temp; 28 29 30 } 31 32 }