快速排序非递归

来源:互联网 发布:椭圆拟合算法 编辑:程序博客网 时间:2024/05/21 08:46
int Pritation(int arr[], int left, int right) {      int tmp = a[left];      int i = left, j = right;      while (i < j)      {         while (i > j&&arr[j] >= tmp)             j--;         if(i<j)            arr[i]=arr[j];         while (i < j&&arr[i] <= tmp)             i++;         if(i<j)             arr[j]=arr[i];     }     arr[i] = tmp;     return i; }void QuickSort(int arr[], int left,int right){    stack<int> s;    int i, j;    //(注意保存顺序)先将初始状态的左右指针压栈    temp.push(right);//先存右指针    temp.push(left);//再存左指针    while (!temp.empty())    {        i = temp.top();//先弹出左指针        temp.pop();        j = temp.top();//再弹出右指针        temp.pop();        if (i < j)        {            int mid = Pritation(a, i, j);            if (mid > i)            {                temp.push(mid - 1);//保存中间变量                temp.push(i);  //保存中间变量             }            if (j > mid)            {                temp.push(j);                temp.push(mid + 1);            }        }    }}
原创粉丝点击