Java数组与排序问题
来源:互联网 发布:淘宝恶意评价投诉入口 编辑:程序博客网 时间:2024/06/05 18:34
数组
Java中包括基本类型和对象类型,其中数组属于对象类型。(虽然在C++中数组也是基本类型)
int[] a;a=new int[100];//int[] a=new int[100]
数组存储在其他的地址中,a中指保存内个地址。
数组一旦创建,大小不会改变。初始化为空null,当我们尝试访问含有null数组数据项时,会得到空指针报错。
数组可以按照无须数组和有序数组来进行分别学习。
简单排序
- 冒泡排序
public void bubleSort(){ int out,in; for(out=n-1;out>1;out--){ for(in=0;in<out;in++){ if(a[in]>a[in+1]) swap(in,in+1); } } }//endprivate void swap(int m,int n){ long temp=a[m]; a[m]=a[n]; a[n]=temp; }
思路:数组由小到大进行排序,每次将两个相邻的数据进行比较,将大的那个放在右边,整一套下来,保证了最大的在最右边。也就是说内部的in的循环结束后,下标大于out的数据项已经排好。
时间复杂度:O(N^2),可以说是相当慢了
- 选择排序
public void selectionSort(){ int out,in,min; for(out=0;out<n-1;out++){ min=out; for(in=out+1;in<n;in++){ if(a[in]<a[min]) min=in; swap(out,min);//swap()函数同上,实际交换的是引用的位置 } }}//end
不同于冒泡排序中数组下标大于out的总是有序的,在选择排序中,数组下标小于in的总是有序的。
选择排序中,进行的比较次数和冒泡排序中的一样多,但是交换次数只有O(N),但是我们认为N值很大时,时间复杂度依然是O(N^2)。但是选择排序会比冒泡排序要快很多啦。
- 插入排序
public void insertionSort(){ int in,out; for(out=1;out<n;out++){ long temp=a[out]; in=out; while(in>0&&a[in-1]>temp){ a[in]=a[in-1]; --in; } a[in]=temp; } }
每一趟之后,比out下标小的总是有序的。out标记了未排序部分的最左端数据,in从out变量向左移动,直到temp值小于in所指的数组数据项。
适用于基本有序的数组。
tips:
复制是交换的三倍
在插入排序中,一个数据项被插入到局部有序的组合后,他将永远不会向左边移动。
稳定性是指在对州进行排序时,每个周的城市还要求按照人口递增排序。
阅读全文
0 0
- Java数组与排序问题
- java数组排序问题
- Java数组与排序
- java数组、排序问题1
- java中数组排序问题
- java数组复制与排序
- java数组与简单排序
- Java数组与选择排序
- java 排序 算法与问题
- java中的数组与集合的排序
- java中的数组与集合的排序
- java中数组的比较与排序
- Java基础05-数组排序与查找
- java数组排序,查找与置换
- java数组的排序与拷贝
- Java数组-选择排序-排序的性能问题
- 17、java数组查找与交换排序及快速排序
- 17、java数组查找与交换排序及快速排序
- tensorflow Examples:<1>实现Nearest Neighbor
- String类为什么是final,以及如果不是final会如何
- HOOK
- Xen授权机制
- Centos 7 利用LVM实现动态扩容
- Java数组与排序问题
- 构造函数相互调用使用this指针
- 如何获取当前时间
- Java基础IO之一字符流
- Python http.server源码剖析(一)
- 求补码就是先找到倒数第一个1
- 为何全色影像分辨率高于多光谱影像分辨率
- Codeforces 817D Imbalanced Array【思维】好题!
- canvas实现图片压缩及复制