前言:突发奇想,冒泡排序递归怎么写??然后查了一下百度,发现好多的写法都是 递归里面来一个for循环这样的递归方法。有没有纯递归就能完成冒泡排序呢?
第一次冒泡排序如上图 比较顺序是 01 12 23 34
第二次是 01 12 23
第三次是 01 12
第四次 01
经过这些有限次的比较以后 使得数组元素有序。
递归的写法和思路也是基本相同 。先上非递归的 基础冒泡排序 排完序是递减的有序序列 n是元素个数
for(int i=1;i<n;i++)
for(int j=0;j<n-i;j++)
if(a[j]<a[j+1])
swap(a[j],a[j+1]);
那冒泡排序就可以这样解析: i 从 1 开始 累加至大于等于 n时排序结束。每一次的 i 都会伴随着 n-i 次冒泡处理。每一次的冒泡处理 j 都伴随着比较交换的操作。
那么 递归出口就是 i>=n
那么 i,j变化的条件是 j>=n-i
那么就可以完成递归的写法:
void mppx(int n,int i,int j,int a[]){
if(i>=n)
return;
else if(j>=n-i)
i++,j=0;
if(a[j]<a[j+1])
swap(a[j],a[j+1]);
mppx(n,i,j+1,a);
}
有错误可以指正。昨天竟然无故失眠 什么情况??