递归
void Recursion_sort(vector& nums, int l, int r) { if (l + 1 >= r) { return; } int first = l, last = r - 1, temp = nums[first];//基准 while (first < last) { while (first < last && temp <= nums[last]) { last--; } if (first < last) nums[first] = nums[last]; while (first < last && temp >= nums[first]) { first++; } if(first < last) nums[last] = nums[first]; } nums[first] = temp; Recursion_sort(nums, l, first);//区间 [0---mid] Recursion_sort(nums, first+1, r);//区间 [mid+1---size] }
非递归
int Recursion_sort(vector& nums, int l, int r) { if (l >= r) { return -1; } int first = l, last = r , temp = nums[first];//基准 while (first < last) { while (first < last && temp <= nums[last]) { last--; } if (first < last) nums[first] = nums[last]; while (first < last && temp >= nums[first]) { first++; } if(first < last) nums[last] = nums[first]; } nums[first] = temp; return first; } void NRecursion_sort(vector & nums) { stack st; st.push(0), st.push(nums.size() - 1); while (!st.empty()) { int r = st.top(); st.pop(); int l = st.top(); st.pop(); int mid = Recursion_sort(nums,l, r); if (mid - 1 > l) { st.push(l), st.push(mid - 1); } if (mid + 1 < r) { st.push(mid+1), st.push(r); } } }
测试:
int main()
{
vectornums={ 6,2,5,8,7,9,4,5,1,3,5,4,0 };
for (auto c : nums) {
cout << c << " ";
}
cout << endl;
NRecursion_sort(nums);
Recursion_sort(nums, 0, nums.size());
for (auto c : nums) {
cout << c << " ";
}
return 0;
}



