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