- 论坛徽章:
- 0
|
自己带了几个数值进去了,观察到for语句的作用是,将大于v[left]的元素右移,直到他们都在v[last]右边。
swap(v,left,last); 将v[left]和v[last]互换,从而实现一次划分。
现在有个问题不明白:
在for循环之前,交换最左v[left]和中间元素v[(left + right)/2]的值有什么作用呢? ( swap(v, left, (left + right)/2);)
好疑惑啊,请哪位大侠帮忙解答下,谢谢。
- void qsort(int v[], int left, int right)
- {
- int i, last;
- void swap(int v[], int i,int j);
- if(left >= right) /*数目小于2,快速排序结束*/
- return ;
- swap(v, left, (left + right)/2); /*将最左和中间元素互换 ----这样做是为什么呢?有什么道理?*/
- last = left; /*将最左元素的值赋给变量last*/
- for(i = left +1; i <=right; i++) /*将大于V[left]的数右移*/
- {
- if(v[i] <v[left])
- swap(v, ++last, i);
- }
- swap(v,left,last); /*将v[left]移动到这些(大于v[left])数的左边*/
- qsort(v, left, last-1);
- qsort(v, last+1, right);
- }
- void swap(int v[], int i, int j) /*交换v[i]和v[j]的值*/
- {
- int temp;
- temp = v[i];
- v[i] = v[j];
- v[j] = temp;
- }
复制代码 |
|