排序

来源:互联网 发布:sql server 大数据 编辑:程序博客网 时间:2024/05/24 07:14

讲座好无聊,来写总结

插入排序:
基础思想就是:我和左边的比,如果比左边的小,就继续向左,直至0或者找到大的,在这个比较的过程中不断的后移,找到后把原来的被比较数放到这一位;
支持:这个过程得从第一位(逻辑上第二位)开始,这样才支持一下代码

/**插入排序法*/void insertsort(int array[],int n){    for(int i=1;i<n;i++)    {        if(array[i-1]>array[i])        {            int temp=array[i];            int j=i;            while(j>0&&array[j-1]>temp)            {                array[j]=array[j-1];                j--;            }            array[j]=temp;        }    }}

快速排序法:
基础思想:二分法
随便取一个key,是数组中的随便的值(a[0]或者a[middle])都行
然后取最左边l,最右r,开始比较(l++,r–,交换)
大体的思想就是要将原始数组分成两边,左边的比右边大之类的
直至l>r
然后开始从(left,r)到(l,right)的比较

/**快速排序法具体实现*/    void quicksort(int array[],int left,int right){        int l=left;        int r=right;        int x,temp;//      x=array[(left+right)/2];        x=array[left];//这样也可以         while(l<r)        {            while(array[l]<x&&l<right)            {                l++;            }            while(array[r]>x&&r>left)            {                r--;            }            if(l<=r)            {                temp=array[l];                array[l]=array[r];                array[r]=temp;                l++;                r--;            }        }        cout<<"l=="<<l<<";r=="<<r<<endl;        if(r>left)        {            quicksort(array,left,r);        }        if(l<right)        {            quicksort(array,l,right);        }    }

这里主要是

while(l<r)        {            while(array[l]<x&&l<right)            {                l++;            }            while(array[r]>x&&r>left)            {                r--;            }            if(l<=r)            {                temp=array[l];                array[l]=array[r];                array[r]=temp;                l++;                r--;            }        }

这一段比较难以理解,这里相对比较抽象,他的比较并不一定是对称的,所以一开始就理解成不对称的比较好。就是随便将原始代码分成两组,左边的都比右边的大,直至坐标l>r,再重复这个过程在各自的领域。
说的再多不如自己理解,感谢这个讲座,这个算是牛皮鲜的问题,感觉很简单

0 0
原创粉丝点击