例题 2.8 快速排序

来源:互联网 发布:excel的数据库管理功能 编辑:程序博客网 时间:2024/06/09 20:23

tip:刚开始吧x=a[p];

避免了while(a[--j]>x);可能导致的数组越界,sorry...。


和Mark Allen Weiss 的Data structure and algorithm analysis 的主要区别在于pivot的选择;自我感觉算法书上不如weiss的方法巧妙。


贴代码(未随机选择pivot的代码):

#include<iostream>using namespace std;const int MAX=5;/*void swap(int &m,int &n){int tmp=m;m=n;n=tmp;}*/int partition(int a[],int p,int r){int i=p,j=r+1;int x=a[p];while(1){while(a[++i]<x&&i<r);while(a[--j]>x);//while(a[--j]>x&&j>p);if(i>=j)break;swap(a[i],a[j]);}swap(a[p],a[j]);return j;}void QuickSort(int a[],int p,int r){if(p<r){int q=partition(a,p,r);QuickSort(a,p,q-1);QuickSort(a,q+1,r);}}int main(){int a[MAX];cout<<"请输入"<<MAX<<"个元素: "<<endl; for(int i=0;i<MAX;i++)cin>>a[i];QuickSort(a,0,MAX-1);cout<<"排好序的数组:"<<endl;for(auto s:a)cout<<s<<endl;return 0; } 


                                             
0 0
原创粉丝点击