**快速排序有不止一种代码实现,下面只是其中一种,仅供参考。
// 一种快排模板 必须会自己写!! // 建议模拟一遍,便于理解,光看代码难以真正明白 #includeusing namespace std; void Quicksort(int a[], int s, int e) {// s 代表排序开始位置;e 代表排序终止位置。 if(s>=e) return;// 保证开始位置在终止位置之前。 int left = s, right = e;// 利用始末位置而不改变原值:所以增加两个新变量。 int key = s;// key类似指针,开始时指向初始位置,即假设第一个数是有序的。 while(right > left) { while(right > left && a[right] >= a[key]) right--;// 必须从右边的在前面 while(right > left && a[left] <= a[key]) left++;// 从前面得知,key == left,如果这两行在前面,那一定会先执行这个操作,这样不行 swap(a[left], a[right]);// swap是一个简单的交换函数(偷下懒qaq) }// lefe == right 时跳出while循环 // 如果不能理解建议在自己手画模拟一遍 swap(a[key], a[left]);// 以此时的a[left] 为分界线,前面的数一定比a[left]小,后面的一定比a[left]大 // 再运用递归将a[left]前面的和后面的分别排好序 Quicksort(a, s , left-1); Quicksort(a, left+1 ,e ); } int a[500]; int main() { int n; while(cin >> n){ for(int i = 0; i < n; i++) cin >> a[i]; Quicksort(a, 0, n - 1); for(int i = 0; i < n; i++) cout << a[i] << " "; cout << endl; } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)