文档介绍:: .
4种面试中常见的排序方法一:冒泡排序:
思路:相邻两个元素之间的比较。例如将一数组按从小到大排列: .
4种面试中常见的排序方法一:冒泡排序:
思路:相邻两个元素之间的比较。例如将一数组按从小到大排列:第一轮两个元素相比较,将数组中最大的元素放到数组的最末尾;第二轮两个元素相比较,将数组中次大的元素放到数组的倒数第二位,此时不用和最后一个元素相比较了;第三轮两个元素相比较,将第三大的元素放在数组的倒数第三的位置上,此时也不用比较和倒数第二个数和倒数第一个数相比较了;然后依次类推得出结果。
代码:
voidbubblesort(iiita[].mtlen){
fbr(i=1;i<len;++i){for(j=0;j<len-i;++j)(if(a[j]>a[j+1])(intk=a|j];a[j]=a[j+!];a[j+l]=k;))
}}
选择排序思路:两个元素相比较,注意不一定是相邻的元素哦!例如将一数组从小到大排列,第一轮先找到最大的元素然后和数组最后一个元素相交换:第二轮找到次大的数与数组倒数第二个元素相交换,以此类推....
代码:
voidselcetsoit(iiita[],mtlen){
niti,j,=0;
fbr(i=1;i<len;++i){max=len-i;for(j=0;j<len-i;++j)(if(a[j]>a[max])(max=j;))if(max!=len-i)(t=a。];a[j]=a[max];a[niax]=t;)
}}三:插入排序思路:,将前面的元素与此基准相比较:第二轮以下标为2的元素为基准,将前面的元素与此基准相比较:以此类推。
代码:
voidinsertsort(inta[],intlen)(k;
fbr(i=1;i<len;++i)(k=a[i];for(j=i;j>0;-j)(if(a[j-l]>k)(a[j]=a|j-l];}elsebreak;a[j-l]=k;)
}}四:快速排序思路:第一轮排序:1)先以首元素为基准,假设首元素npivot=14,设定两个指针指向i,j分别指向数组的首尾元素;2)向前移动指针j直到指向第一个小于14的元素,并将此元素置换到1所指向的位置:3)向后移动指针1直到指向第一个大于14的元素,并将此元素置换到J所指向的位置;4)然后继续执行2)3),当i==j时,则将14放在1或j的位置上;然后后面的几轮排序则使用递归的方式继续mtquic