java如何实现排序,java快速排序的两种方法
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
学习视频分享:java视频教程
普通插入:从数组的第二个元素进行操作,当发现其前面的元素比他大时,执行交换操作。
static int[]insert sort(int[]array){
int len=数组.长度
for(int begin=1;开始低输入联网(low-entry networking的缩写)开始){
int cur=begin
while(cur 0 array[cur]array[cur-1]){
int tmp=array[cur];
数组[cur]=数组[cur-1];
array[cur-1]=tmp;
cur-;
}
}
返回数组;
}第一步优化:从数组的第二个元素进行操作,如果发现其前面的元素比他大,就将其前面的元素往后挪,直到cur指向的元素大于或者等于他前一个元素,此时cur指向的位置就是待插入元素应该插入的位置。
静态int[] insertSort2(int[] array){
int len=数组.长度
for(int begin=1;开始低输入联网(low-entry networking的缩写)开始){
int cur=begin
int tmp=array[cur];
while(cur 0 array[cur]array[cur-1]){
数组[cur]=数组[cur-1];
cur-;
}
array[cur]=tmp;
}
返回数组;
}第二步优化
第三种算法和第二种其实本质上是一样的,都是找待插入位置,挪动元素,只不过第三种算法通过二分查找减少了比较次数,即cmp函数的调用,还减少了swap函数的调用。更快的找到了当前元素应该插入的位置,然后再进行挪动,提高了效率。
静态int[] insertSort3(int[] array){
int len=数组.长度
for(int begin=1;开始低输入联网(low-entry networking的缩写)开始){
int v=array[begin];
int insertIndex=search(array,begin);
//将[插入索引,开始]范围内的元素往右边挪动一个单位
for(int I=begin;我插入索引;我- ){
array[I]=array[I-1];
}
array[插入索引]=v;
}
返回数组;
}
静态int search(int[] array,int index){
int begin=0;
int end=index
while(begin end){
int mid=(begin end)1;
if (array[index] array[mid]){
结束=中间
}否则{
begin=mid 1;
}
}
返回开始;
}需要注意的是:使用了二分搜索后,只是减少了比较次数,但插入排序的平均时间复杂度依然是O(n^2)
将其中的挪动操作分离出来的效果:
包com。mj。排序。CMP导入com。mj。排序。排序;公共类插入sort 3t扩展comparable t扩展SortT {
//protected void sort(){//for(int begin=1;开始array . length begin){//T v=array[begin];//int insert index=search(begin);////将[插入索引,开始]范围内的元素往右边挪动一个单位for(int I=begin-1;I=insertIndexI-){ }//for(int I=begin;我插入索引;I-){//array[I]=array[I-1];//}//array[插入索引]=v;//}//}
@覆盖
受保护的空的排序(){
for(int begin=1;开始数组.长度开始){
insert(begin,search(begin));//元素索引给你,你告诉这个位置的元素往哪插
}
}
/**
* 将来源位置的元素插入到建筑环境及(同high-voltagealternatingcurrent)高压交互电流系统模拟的软件平台位置
* @param源
* @参数目标
*/
私有空插入(int source,int dest) {
t v=array[source];
for(int I=source;我想我- ) {
array[I]=array[I-1];
}
array[dest]=v;
}
/**
* 利用二分搜索找到指数位置元素的待插入位置
* 已经排好序数组的区间范围是[0,索引]
* @param索引
* @返回
*/
私有(同Internationalorganizations)国际组织搜索(int索引){
int begin=0;
int end=index
while (begin end) {
int mid=(begin end)1;
if (cmp(array[index],array[mid]) 0) {
结束=中间
}否则{
begin=mid 1;
}
}
返回开始;
}}相关推荐:java入门教程以上就是爪哇岛实现插入排序后怎么进一步优化的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。