[面试算法] 排序算法

来源:互联网 发布:软件编程软件 编辑:程序博客网 时间:2024/06/06 08:35

快速排序:

int partion(vector<int> &nums, int begin, int end){int x = nums[end], i = begin - 1;for (int j = begin; j < end; j++){if (nums[j] <= x){swap(nums[++i], nums[j]);}}swap(nums[++i], nums[end]);return i;}void quickSort(vector<int> &nums,int begin,int end){if (begin < end){int q = partion(nums, begin, end);quickSort(nums, begin, q - 1);quickSort(nums, q + 1, end);}}

归并排序:

void merge(vector<int> &nums, int begin, int end, int mid){vector<int> temp(end - begin + 1);int i = begin, j = mid + 1, k = 0;while (i <= mid && j <= end){if (nums[i] <= nums[j]){temp[k++] = nums[i++];}else{temp[k++] = nums[j++];}}while (i <= mid){temp[k++] = nums[i++];}while (j <= end){temp[k++] = nums[j++];}for (int x = begin; x <= end; x++){nums[x] = temp[x - begin];}}void mergeSort(vector<int> &nums, int begin, int end){if (begin < end){int mid = (begin + end) >> 1;mergeSort(nums, begin, mid);mergeSort(nums, mid + 1, end);merge(nums, begin, end, mid);}}

堆排序:

void HeapAdjust(vector<int> &nums, int start, int end){int large = start, l = start * 2 + 1, r = start * 2 + 2;if (l<end && nums[l]>nums[large]) large = l;if (r<end && nums[r]>nums[large]) large = r;if (large != start){swap(nums[start], nums[large]);HeapAdjust(nums, large, end);}}void HeapSort(vector<int> &nums){int len = nums.size();for (int i = len / 2 - 1; i >= 0; i--)HeapAdjust(nums, i, len);for (int i = len - 1; i > 0; i--){swap(nums[i], nums[0]);HeapAdjust(nums, 0, i);}}


0 0
原创粉丝点击