java中排序方法有哪些
1、直接插入排序:最基本的插入排序,将第i个插入到前i-1个中的适当位置。
2、折半插入排序:因为是已经确定了前部分是有序序列,所以在查找插入位置的时候可以用折半查找的方法进行查找,提高效率。
3、 希尔排序: 又称缩小增量排序法。把待排序序列分成若干较小的子序列,然后逐个使用直接插入排序法排序,最后再对一个较为有序的序列进行一次排序,主要是为了减少移动的次数,提高效率。原理应该就是从无序到渐渐有序,要比直接从无序到有序移动的次数会少一些。
4、 冒泡排序:反复扫描待排序序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。第一趟,从第一个数据开始,比较相邻的两个数据,(以升序为例)如果大就交换,得到一个最大数据在末尾;然后进行第二趟,只扫描前n-1个元坦码启素,得到次大的放在倒数第二位。以此类推,最后得到升序序列。如果在扫描过程中,发现没有交换,说明已经排好序列,直接终止扫描。所以最多进行n-1趟扫描。
5、快速排序: 思想:冒泡排序一次只能消除一个逆序,为了能一次消除多模没个逆序,采用快速排序。以一个关键字让如为轴,从左从右依次与其进行对比,然后交换,第一趟结束后,可以把序列分为两个子序列,然后再分段进行快速排序,达到高效。
此外还有选择、归并、分配排序等等及它们的子类排序
快速排序的原理是什么
先
数态举据序列
选
元素,并
序列
所
比该元素
元素都放
右边或左边,再
左右两边
别用同
处
直
每
待处理
序列
度
1,
处理结束
前
序区R[1..H]
任取
数据元素作
比较
“基准”(
妨记
X)
用
基准
前
序区划
左右两
较
序区:R[1..I-1]
R[I+1..H]
且左边
序
区
数据元素均
于等于基准元素
右边
序
区
数据元素均
于等于基准元素
基准X则位于
终排序
位置
即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H)
R[1..I-1]
R[I+1..H]均非空
别
进行
述
划
程
直至所
序
区
数据元素均已排序
止
快速排序
基本思想
基于
治策略
于输入枝闭唯
序列L[p..r]
规模足够
则直接进行排序(比
用前述
冒泡、选择、插入排序均
)
否则
三步处理:
解(Divide):
待排序列L[p..r]划
两
非空
序列L[p..q]
L[q+1..r]
使L[p..q]
任
元素
值
于L[q+1..r]
任
元素
值
具体
通
途径实现:
序列L[p..r]
选择数据元素L[q]
经比较
移
L[q]
处于L[p..r]
间
适
位置
使
数据元素L[q]
值
于L[q+1..r]
任
元素
值
递归求解(Conquer):通
递归调用快速排序算
别
L[p..q]
L[q+1..r]进行排序
合并(Merge):由于
解
两
序列
排序
进行
所
L[p..q]
L[q+1..r]都排
序
需要执行任何计算L[p..r]
已排
序
即自
合并
解决流程
符合
治
基本步骤
快速猛培排序
治
经典应用实例
快速排序算法原理与实现
快速排序的基本思想就是从一个数组中任意挑选一个元素(通常来说会选择最左边的元素)作为中轴元素,将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边。
然后以当前中轴元素的位置为界,将左半部分子数组和右半部分子数组看成两个新的数组,重复上述操作,直到子数组的元素个数小于等于1(因为一个元素的数组必定是有序的)。
以下的代码中会常常使用交换数组中两个元素值的Swap方法,其代码如下
public static void Swap(int[] A, int i, int j){
int tmp;
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
扩展资料:
快速排序算法 的基本思想是:将所要进行排序的数分为左谈哪袭右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止。
定义两个变量low和high,将low、high分别设置为要进行排序的序列的起始元素和最后一个元素的下标。第一次,low和high的取值分别为0和n-1,接下来的每次取值由划分得到的序列起始元素和最后一个元素的下标来决定。
定义一个变量key,接下来以key的取值为基准将数组A划分为左右两个部分,通 常,key值为要进行排序序列的第一个元素值。第一次的取值为A[0],以后毎次取值由要划 分序列的起始元素决定。
从high所指向的数组元素开始向左扫描,扫描的同时将下标为high的数组元素依次与划分基准值key进行比较操作,直到high不大于low或找到第一个小于基准值key的数组元素,然后将该值赋值给low所指向的数组元素,同时将low右移一个位置。
如果low依然小于high,那么由low所指向的数组元素开始向右扫描,扫描的同时将下标为low的数组元素值依次与划分的基准值key进行比较操作,直到low不小于high或找到第一个大于基准值key的数组元素,然后将该值赋给high所指向的数组元素,同时将high左移一个位置。
重复步骤(3) (4),直到low的植含兄不小于high为止,这时成功划分后得到的左右两缓御部分分别为A[low……pos-1]和A[pos+1……high],其中,pos下标所对应的数组元素的值就是进行划分的基准值key,所以在划分结束时还要将下标为pos的数组元素赋值 为 key。
参考资料:快速排序算法_百度百科
java怎么让数组的数字从大到小排序?
将数字从大到小排序的方法:
例如简一点的冒泡排序,将第一个数字和后面的数字逐个比没御烂较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组中的最大数。然后再将第二个数与后面的数逐个比较,以次类推。
示例代码如下:
public class Test {
public static void main(String[] args) {
int [] array = {12,3,1254,235,435,236,25,34,23};
int temp;
for (int i = 0; i array.length; i++) {
for (int j = i+1; j array.length; j++) {
if (array[i] array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp; // 两个数交换位置
}
}
}
for (int i = 0; i array.length; i++) {
System.out.print(array[i]+” “);
}
}
}
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。
你可以声明枯漏一个数组变拆肆量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,….,number99
扩展资料
Java中利用数组进行数字排序一般有4种方法:
1、选择排序是先将数组中的第一个数作为最大或最小数,然后通过循环比较交换最大数或最小数与一轮比较中第一个数位置进行排序。
2、冒泡排序也是先将数组中的第一个数作为最大或最小数,循环比较相邻两个数的大小,满足条件就互换位置,将最大数或最小数沉底。
3、快速排序法主要是运用Arrays类中的Arrays.sort方法()实现。
4、插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序。
什么是快速排序。
基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入最森激终笑春拿位置后,整个数据区间被此记录分割成两子区间。所有关键字比该记录关键字小的放置在前子区间中,所有比它大的放置在后子区间中,并把该记录排在这两个子区间的中间,这个过程称为一趟碰搭快速排序.
之后对所有的两个子区间分别重复上述过程,直至每个子区间内只有一个记录为止。简而言之,每趟排序使表的第一个元素入终位,将数据区间一分为二,对于子区间按递归方式继续这种划分,直至划分的子区间长为1。