// 快速排序_非递归.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <vector> using namespace std; int myArray[] = {3,0,6,1,11,7,2,12,4,10,9,5,8}; void printArray(int *Array, int len) { for (int idx = 0; idx < len; idx++) { printf("%d ", Array[idx]); } printf("\r\n"); } int partition(int *s, int l, int r) { int i = l, j = r; int x = s[l]; //s[l]即s[i]就是第一个坑 while (i < j) { // 从右向左找小于x的数来填s[i] while(i < j && s[j] >= x) j--; if(i < j) { s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑 i++; } // 从左向右找大于或等于x的数来填s[j] while(i < j && s[i] < x) i++; if(i < j) { s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑 j--; } } //退出时,i等于j。将x填到这个坑中。 s[i] = x; return i; } void QuickSort(int *Array, int startPos, int endPos) { std::vector<int> vector; int p, q, r; r = partition(Array, startPos, endPos); p = startPos; q = r-1; vector.push_back(r+1); vector.push_back(endPos); while (p < q || vector.size() > 0) { if (p < q) { r = partition(Array, p, q); vector.push_back(r+1); vector.push_back(q); q = r-1; } else { q = vector.back(); vector.pop_back(); p = vector.back(); vector.pop_back(); } } } int _tmain(int argc, _TCHAR* argv[]) { int len = sizeof(myArray)/sizeof(myArray[0]); printArray(myArray, len); QuickSort(myArray, 0, len-1); printArray(myArray, len); return 0; }
快速排序(非递归算法)
最新推荐文章于 2023-12-27 16:48:42 发布