快速排序基本的实现
#include <stdio.h>
#include <stdlib.h>
int * quickSort(int * data,int start,int end){
if(data == NULL || start==end){
return data;
}
int back_start=start;
int back_end=end;
int middle=(start+end)/2;
while(start<=end){
if(data[start]>=data[end]){
int tmp=data[start];
data[start]=data[end];
data[end]=tmp;
start++;
}else{
end--;
}
}
//前
quickSort(data,back_start,middle);
//后面
quickSort(data,middle+1,back_end);
return data;
}
int main()
{
int array[6]={2,1,0,5,8,3,'\0'};
int length=sizeof(array) / sizeof(array[0]);
int *data=quickSort(array,0,length-1);
//data[i] !='\0' ???
int i=0;
while(i<6 ){
printf("%d",data[i]);
i++;
}
return 0;
}
今天 笔试人人车,最后有一个算法题:有一个一维数组,都为整数,奇数数值放在数组前面,偶数数字放在数组后面。当时想直接把奇偶分出来再拼接不就得了,又怀疑没有这么简单,半信半疑的写了。百度之后发现效率不高。有几种实现法,下面是其中的一种。
#include <stdio.h>
#include <stdlib.h>
int * quickSort(int * data,int start,int end){
if(data == NULL || start==end){
return data;
}
int i=start,j=end;
while(start<=end){
while((data[i]%2)!=0){
i++;
}
while((data[j]%2)!=1){
j--;
}
if(i<=j){
int tmp = data[i];
data[i]=data[j];
data[j]=tmp;
}else{
break;
}
}
return data;
}
int main()
{
int array[6]={2,1,0,5,8,3,'\0'};
int length=sizeof(array) / sizeof(array[0]);
int *data=quickSort(array,0,length-1);
int i=0;
while(i<6 ){
printf("%d",data[i]);
i++;
}
return 0;
}