排序

原创 2015年11月20日 21:12:47

讲座好无聊,来写总结

插入排序:
基础思想就是:我和左边的比,如果比左边的小,就继续向左,直至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,再重复这个过程在各自的领域。
说的再多不如自己理解,感谢这个讲座,这个算是牛皮鲜的问题,感觉很简单

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

图文并貌的DAG(有向无环图)拓扑排序:Kahn算法

图文并貌的DAG(有向无环图)拓扑排序:Kahn算法 正在从小白成长的我想写一个小白看得懂的DAG拓扑排序!不要嫌我啰嗦噢! 目录 1.什么是DAG 2.什么是拓扑排序 3.Kahn算法思想 4...

2.选择排序-java实现

——将Comparable对象的数组从小到大排序的类 时间效率:O(n2)package algorithmData; /**使用选择排序法对数组进行排序的类。 * 将Comparable对象的数...

排序算法合集

选择排序

定义 由名称可知,选择排序的操作是通过不断选择待排序列表中的最大(最小)值,由此构成一个有序列表。冒泡排序的每次排序也是选出列表极值,不过其操作是通过不断比较替换相邻元素实现的,选择排序的每次排序是记...

根据对象属性将对象排序

  • 2017-09-29 15:26
  • 161KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)