转 快速排序
原文作者不明
1 #include <iostream> 2 using namespace std; 3 4 int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置 5 { 6 int i = l, j = r; 7 int x = s[l]; //s[l]即s[i]就是第一个坑 8 while (i < j) 9 { 10 // 从右向左找小于x的数来填s[i] 11 while(i < j && s[j] >= x) j--; 12 if(i < j) 13 { 14 15 s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑 16 i++; 17 } 18 19 // 从左向右找大于或等于x的数来填s[j] 20 while(i < j && s[i] <= x) i++; 21 if(i < j) 22 { 23 s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑 24 j--; 25 } 26 } 27 //退出时,i等于j。将x填到这个坑中。 28 s[i] = x; 29 30 return i; 31 } 32 33 void quick_sort1(int s[], int l, int r) 34 { 35 if (l < r) 36 { 37 int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[] 38 quick_sort1(s, l, i - 1); // 递归调用 39 quick_sort1(s, i + 1, r); 40 } 41 } 42 43 void main() 44 { 45 int a[] = {2, 32, 15, 29 ,1, 23, 12}; 46 quick_sort1(a, 0, sizeof(a)/sizeof(int) - 1); 47 48 for (int i = 0; i < sizeof(a)/sizeof(int); i++) 49 { 50 cout << a[i] << endl; 51 } 52 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。