快速排序算法学习心得(Java实现)
来源:互联网 发布:1024光束灯编程教学 编辑:程序博客网 时间:2024/06/05 00:35
先上代码:
int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置,传入的参数分别是:子数组,子数组的第一个数的下标,最后一个数的下标
{
int i = l, j = r;
int x = s[l]; //s[l]即s[i]就是第一个坑
while (i < j)
{
// 从右向左找小于x的数来填s[i]
while(i < j && s[j] >= x) //不要以为这个地方的i<j和上面的while循环里面的条件相重复了,因为while循环反复判断括号里面的条件,反复在执行j--;说不定什么时候j减到小于i了也不一定啊。
j--;
if(i < j)
{
s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
i++;
}
// 从左向右找大于或等于x的数来填s[j]
while(i < j && s[i] < x)
i++;
if(i < j)
{
s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
j--;
}
}
//退出时,i等于j。将x填到这个坑中。
s[i] = x;
return i;
}
//这个函数的核心就是在一个子数组里面(可能是左边的,也可能是右边的)得出基准元素最终的下标,进行下一步的迭代。思想是一第一个数为基准元素,将其保存在x里面,形成一个坑,从后往前找比基准元素小的填这个坑,新形成的坑怎么办呢,从前往后找比基准元素大的填坑,(这样做的目的是前面的元素肯定是比x小的,后面的元素肯定是比x大的)这样不断地进行,直到i=j为止,此时最后的坑由x去填,即最初的基准元素。
void quick_sort1(int s[], int l, int r)
{
if (l < r)
{
int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]
quick_sort1(s, l, i - 1); // 递归调用
quick_sort1(s, i + 1, r);
}
}
adjustArray函数返回了一个值,这个值记录了一次排序后基准元素的下标,记为i,则i+1是子数组的最左边的元素(这个数组所有的元素都比这个基准元素大),i-1是子数组的最右端(这个数组所有的元素都比这个基本数组小)。递归之后就得到排好的顺序了。{
if (l < r)
{
int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]
quick_sort1(s, l, i - 1); // 递归调用
quick_sort1(s, i + 1, r);
}
}
参考博客:http://blog.csdn.net/morewindows/article/details/6684558
0 0
- 快速排序算法学习心得(Java实现)
- Java实现数组的快速排序(快速排序算法)
- 快速排序算法(java实现)
- 快速排序算法(C & Java 实现)
- 算法1-快速排序(java实现)
- 快速排序算法(java实现)
- Java快速排序(QuickSort)算法实现
- 快速排序算法(Java实现)
- 快速排序算法(Java实现)
- 快速排序算法(java实现)
- 排序算法之快速排序、归并排序(java实现)
- java实现快速排序算法
- java实现快速排序算法
- 算法-快速排序-java实现
- 快速排序算法Java实现
- java算法实现快速排序
- java实现快速排序算法
- 快速排序算法-java实现
- iOS中的单例
- iOSDay37数据处理之CoreData
- ipsec vpn vyatta vs vyatta
- iOS开发代码规范(通用)
- SQLite错误码
- 快速排序算法学习心得(Java实现)
- iOS数据持久化文件读写之偏好设置
- python的json格式文件读写
- iOSDay38网络之数据解析
- [置顶]iOSDay25之UIScrollView
- [置顶]iOSDay29之UITableView
- EPOLL的理解和深入分析
- 图的遍历 (深度优先 广度优先)
- [置顶]iOSDay34之UICollectionView