快速排序

来源:互联网 发布:杭州初级程序员薪资 编辑:程序博客网 时间:2024/05/21 17:35

记得读书的时候一直纠结快速排序,自己觉得已经掌握了其思想(找到一个位置i,i左边的元素小于位置i上的元素,右边的元素大于i上的元素,然后递归),但就是写不出来,心里十分苦闷。晚上冲凉的时候又想到这事,于是有了下面的代码,运行,无错,痛快。


#include<iostream>
using namespace std;
       
template<class T> void swap(T *a,int i,int j)
{
     T tmp = a[i];
     a[i] = a[j];
     a[j] = tmp;
     return;
}
template<class T> int find_pos(T *a,int left,int right)
{
     if(left>=right)
        return left;
     int i = left;
     int j = i;
     for(;j<=right;j++)
     {
        if(a[i]>a[j])
        {
           swap(a,i+1,j);
           swap(a,i,i+1);
           i++;             
        }                 
     }
     return i;
  }


template<class T> void quik_sort(T *a,int left,int right)
{
     if(left >= right)
       return;
     int pos = find_pos(a,left,right);
     quik_sort(a,left,pos-1);
     quik_sort(a,pos+1,right);
}


int main()
{
    int a[10] = {1,0,3,5,3,6,9,7,2,-8};
    quik_sort(a,0,9);
    for(int k = 0;k<10;k++)
    {
       cout<<a[k]<<"  ";       
    }
    cout<<endl;
    system("pause");
}

原创粉丝点击