java堆排序代码//从a[index]到a[len]除排序方法java代码了a[index]外其它元素满足一个堆,把a[index]调整到合适位置
//这个堆满足父节点孩子结点,且要保证2*index能取到index排序方法java代码的左孩子,
public static void adjustHeap(int[] a,int index,int len){
int scn=a[index];
for(int i=2*index;i=m;i*=2){
if(ima[i]a[i 1])i =1;
if(!a[i]scn)break;
a[index]=a[i];index=i;
}
a[index]=scn;
}
//数组a从a[1]开始存放元素,如果想从a[0]开始则要调整adjustHeap代码,以便满足完全二叉树
//性质,代码未经测试
public static void heapSort(int[] a){
for(int i=(a.length-1)/2;i0;i--)
adjustHeap(a,i,a.length-1);
int tmp;
for(int i=a.length-1;i1;i--){
tmp=a[i];
a[i]=a[1];
a[1]=tmp;
adjustHeap(a,1,i-1);
}
}
java冒泡排序法代码冒泡排序是比较经典的排序算法 。代码如下:
for(int i=1;iarr.length;i){
for(int j=1;jarr.length-i;j){
//交换位置
}
拓展资料:
原理:比较两个相邻的元素,将值大的元素交换至右端 。
思路:依次比较相邻的两个数,将小数放在前面 , 大数放在后面 。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后 。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后 。重复第一趟步骤,直至全部排序完成 。
第一趟比较完成后,最后一个数一定是数组中最大的一个数 , 所以第二趟比较的时候最后一个数不参与比较;
第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;
依次类推,每一趟比较次数-1;
??
举例说明:要排序数组:int[] arr={6,3,8,2,9,1};
for(int i=1;iarr.length;i){
for(int j=1;jarr.length-i;j){
//交换位置
}
参考资料:冒泡排序原理
Java几种简单的排序源代码给你介绍4种排序方法及源码,供参考
1.冒泡排序
主要思路: 从前往后依次交换两个相邻的元素,大的交换到后面,这样每次大的数据就到后面 , 每一次遍历,最大的数据到达最后面 , 时间复杂度是O(n^2) 。
public static void bubbleSort(int[] arr){
for(int i =0; iarr.length - 1; i){
for(int j=0; jarr.length-1; j){
if(arr[j]arr[j 1]){
arr[j] = arr[j]^arr[j 1];
arr[j 1] = arr[j]^arr[j 1];
arr[j] = arr[j]^arr[j 1];
}
}
}
}
2.选择排序
主要思路:每次遍历序列,从中选取最小的元素放到最前面 , n次选择后,前面就都是最小元素的排列了 , 时间复杂度是O(n^2) 。
public static void selectSort(int[] arr){
for(int i = 0; i arr.length -1; i){
for(int j = i 1; jarr.length; j){
if(arr[j]arr[i]){
arr[j] = arr[j]^arr[i];
arr[i] = arr[j]^arr[i];
arr[j] = arr[j]^arr[i];
}
}
}
}
3.插入排序
主要思路:使用了两层嵌套循环,逐个处理待排序的记录 。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置,时间复杂度是O(n^2) 。
public static void insertionSort(int[] arr){
int j;
for(int p = 1; parr.length; p){
int temp = arr[p];//保存要插入的数据
//将无序中的数和前面有序的数据相比,将比它大的数 , 向后移动
for(j=p; j0temp arr[j-1]; j--){
arr[j] = arr[j-1];
}
//正确的位置设置成保存的数据
arr[j] = temp;
}
}
4.希尔排序
主要思路:用步长分组,每个分组进行插入排序 , 再慢慢减小步长,当步长为1的时候完成一次插入排序,希尔排序的时间复杂度是:O(nlogn)~O(n2) , 平均时间复杂度大致是O(n^1.5)
public static void shellSort(int[] arr){
int j ;
for(int gap = arr.length/2; gap0 ; gap/=2){
for(int i = gap; iarr.length; i){
int temp = arr[i];
for(j = i; j=gaptemparr[j-gap]; j-=gap){
arr[j] = arr[j-gap];
}
arr[j] = temp;
}
}
}
java中排序算法代码package temp;
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java几种基本排序方法
*/
/**
* SortUtil:排序方法
* 关于对排序方法的选择排序方法java代码:这告诉我们排序方法java代码,什么时候用什么排序最好 。当人们渴望先知道排在前面的是谁时排序方法java代码 ,
* 我们用选择排序;当我们不断拿到新的数并想保持已有的数始终有序时,我们用插入排序;当给出的数
* 列已经比较有序,只需要小幅度的调整一下时,我们用冒泡排序 。
*/
public class SortUtil extends Sort {
/**
【排序方法java代码 排序算法java】* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次从数列中取一个还没有取出过的数,并按照大小关系插入到已经取出的数中使得已经取出的数仍然有序 。
*/
public int[] insertSort(int[] data) {
1/11页
int temp;
for (int i = 1; idata.length; i) {
for (int j = i; (j0)(data[j]data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
return data;
}
/**
* 冒泡排序法
* @param data
* @return
* @Des 冒泡排序(Bubble Sort)分为若干趟进行 , 每一趟排序从前往后比较每两个相邻的元素的大?。ㄒ虼艘惶伺判蛞冉蟦-1对位置相邻的数)并在
* 每次发现前面的那个数比紧接它后的数大时交换位置;进行足够多趟直到某一趟跑完后发现这一趟没有进行任何交换操作(最坏情况下要跑n-1趟,
* 这种情况在最小的数位于给定数列的最后面时发生) 。事实上,在第一趟冒泡结束后,最后面那个数肯定是最大的排序方法java代码了,于是第二次只需要对前面n-1
* 个数排序,这又将把这n-1个数中最小的数放到整个数列的倒数第二个位置 。这样下去,冒泡排序第i趟结束后后面i个数都已经到位了 , 第i 1趟实
* 际上只考虑前n-i个数(需要的比较次数比前面所说的n-1要?。?。这相当于用数学归纳法证明了冒泡排序的正确性
java快速排序简单代码.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px}排序算法是《数据结构与算法》中最基本的算法之一 。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序 , 而外部排序是因排序的数据很大 , 一次不能容纳全部的排序记录,在排序过程中需要访问外存 。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等 。以下是快速排序算法:
快速排序是由东尼·霍尔所发展的一种排序算法 。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较 。在最坏状况下则需要 Ο(n2) 次比较 , 但这种状况并不常见 。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来 。
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists) 。
快速排序又是一种分而治之思想在排序算法上的典型应用 。本质上来看 , 快速排序应该算是在冒泡排序基础上的递归分治法 。
快速排序的名字起的是简单粗暴 , 因为一听到这个名字你就知道它存在的意义 , 就是快,而且效率高!它是处理大数据最快的排序算法之一了 。虽然 Worst Case 的时间复杂度达到了 O(n?),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么呢,我也不知道 。好在我的强迫症又犯了,查了 N 多资料终于在《算法艺术与信息学竞赛》上找到了满意的答案:
快速排序的最坏运行情况是 O(n?),比如说顺序数列的快排 。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很?。?比复杂度稳定等于 O(nlogn) 的归并排序要小很多 。所以 , 对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序 。
1. 算法步骤
从数列中挑出一个元素,称为 "基准"(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边) 。在这个分区退出之后,该基准就处于数列的中间位置 。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
2. 动图演示
代码实现JavaScript实例functionquickSort ( arr ,left ,right ){
varlen=arr. length,
partitionIndex ,
left=typeofleft!='number'?0:left ,
right=typeofright!='number'?len-1:right ;
if( left
JAVA通过数组按首字母排序怎么做?自己封装的一个工具类,可以将汉字按照拼音的首字母排序,支持对Model和字典排序.只能对首字母排序,不支持第二个字母,实现的原理就是创建一个A-Z的数组,数组中的元素是字典,字典中有两个元素,一个是title,就是当前的首字母 A-Z中的一个,另一个是保存当前title对应的元素的数组,对传入的数组进行遍历获得数组中的一个元素,如果是Model或者字典通过传入的key的值获得要排序的字符串,获得字符串的拼音的首字母,判断拼音的首字母是A-Z中的哪一个,然后放到数组中的对应的字典的数组中.
后来又做了一个对英文的首字母排序的程序,原理和上面的一样,还省略了将汉字转化为拼音的步骤 。工具类的名称是:NH_OrderByPinYinFirstLetter 。
代码:使用的时候直接调用下面的方法就行,是一个加号方法,第一个参数是保存要排序的元素的数组,第二个参数:如果数组中是Model或者字典,就写排序的依据的key值,如果数组中不是Model或字典,就写nil 。
[objc] view plain copy
// 方法
(NSMutableArray *)baseOrderPinYinOnArr:(NSMutableArray *)arr ByKey:(NSString *)key返回值的类
// 返回一个有24个元素的数组,数组里的元素是字典
// 字典里有两对键值对
//title : 当前的拼音首字母 A - Z
// datas : 当前的拼音首字母对应的model所组成的数组
关于排序方法java代码和排序算法java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- ppt图片如何移动,ppt图片如何移动到下一层
- 身份通网站制作,身份通首页
- mysql排名怎么写 mysql排名语句怎么写
- 手机连续亮屏幕怎么设置,手机持续亮屏怎么设置
- 拍摄为什么要用伞,为什么要带伞的短视频
- 独立显卡怎么设置华硕电脑,独立显卡怎么设置华硕电脑启动
- 圆的面积代码java java计算圆形的面积
- sap大中华区,SAP大中华区员工人数
- 羞羞游戏单机,羞羞的铁拳游戏