- 論壇徽章:
- 0
|
自己帶了幾個(gè)數(shù)值進(jìn)去了,觀察到for語句的作用是,將大于v[left]的元素右移,直到他們都在v[last]右邊。
swap(v,left,last); 將v[left]和v[last]互換,從而實(shí)現(xiàn)一次劃分。
現(xiàn)在有個(gè)問題不明白:
在for循環(huán)之前,交換最左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) /*數(shù)目小于2,快速排序結(jié)束*/
- return ;
- swap(v, left, (left + right)/2); /*將最左和中間元素互換 ----這樣做是為什么呢?有什么道理?*/
- last = left; /*將最左元素的值賦給變量last*/
- for(i = left +1; i <=right; i++) /*將大于V[left]的數(shù)右移*/
- {
- if(v[i] <v[left])
- swap(v, ++last, i);
- }
- swap(v,left,last); /*將v[left]移動到這些(大于v[left])數(shù)的左邊*/
- 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;
- }
復(fù)制代碼 |
|