
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[(begi+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 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 关键根本没必要交换,,直接取出第一个即可。。。 |