void iswap(int *v,int *t)
{
*v=*v^*t;
*t=*v^*t;
*v=*v^*t;
}
void iqsort(int *v,int begin,int end)
{
int left=begin;
int right=end;
int flag=v[(begin+end)/2];
if(begin>=end)
return;
iswap(&v[left],&v[(begin+end)/2]);
while(left<right){
while(left<right&&v[right]>flag)
right--;
v[left++]=v[right];
while(left<right&&v[left]<=flag)
left++;
v[right--]=v[left];
}
v[left]=flag;
iqsort(v,begin,left-1);
iqsort(v,left+1,end);
}
当对{2,5,4,9,8,4,65}排序时,会有问题。什么原因呢?
1
theFool 2015-06-18 16:45:23 +08:00 1
void iswap(int *v,int *t) {
int temp = *v; *v = *t; *t = temp; } void iqsort(int *v,int begin,int end) { int left=begin; int right=end; int flag=v[(begin+end)/2]; if(begin>=end) return; iswap(&v[left],&v[(begin+end)/2]); while(left<right) { while(left<right&&v[right]>flag) right--; v[left]=v[right]; while(left<right&&v[left]<=flag) left++; v[right]=v[left]; } v[left]=flag; iqsort(v,begin,left-1); iqsort(v,left+1,end); } |
2
thinkIn OP 原因找到了,v[left++]=v[right]-->v[left]=v[right]; v[right--]=v[left]--> v[right]=v[left];
|
3
zonghua 2015-06-18 17:08:13 +08:00 via iPhone
为什么要用指针
|
4
czheo 2015-06-19 07:58:16 +08:00
可以吐槽代码风格么
|
5
wdlth 2015-06-19 09:38:07 +08:00
用亦或,想法不错。
|
6
foreverhy 2015-06-19 09:45:38 +08:00
xor交换变量比普通方法要慢啊。
|
7
thinkIn OP 异或的方法并不会有性能上的优势,主要是懒的再定义一个变量。
|
8
617019296 2015-06-19 13:14:30 +08:00 via Android
关键根本没必要交换,,直接取出第一个即可。。。
|