要求:
1.不能用快排,
2.for嵌套不超过2个
3.不产生中间数组
4.用算法实现,或者写出实现思路
左右逼近,找到能交换的就交换
#include <stdio.h>
void sort01(int* datas, int len) {
int i = 0;
int j = len-1;
while(i < j) {
if (datas[i] == 0) {
i++;
continue;
}
if (datas[j] == 1) {
j--;
continue;
}
datas[i] = 0;
datas[j] = 1;
i++;
j--;
}
}
int main() {
int datas[] = {1,0,0,0,1,0,1,0,1};
int len = sizeof(datas)/sizeof(datas[0]);
sort01(datas,len);
for(int i=0; i<len; i++) {
printf("%d",datas[i]);
}
return 0;
}
直接遍历一遍,记录下0的个数,然后memset前面0的长度个数设置为0,后面设置为1。