- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课XXXXX 学院
课
程设计
作 者: XXX 辅导老 师: XXX 系 部: 信息工程系 专 业: JAVA 面向对象程序设计 题 目: JAVA 的排序算法
2010-12-23
JAVA 排序算法
第
第 PAGE 10 页 /共 23 页
排序算法
(序)
在我们编写程序的时候,经常会碰到算法问题。所谓算法( Alglrithm),就是在有限的步骤内求解某一问题所使用的一组定义明确的规则。算法的好坏直 接影响到程序运行的效率,因此,选择一个好的算法 对于编写高效的程序是至关重要的。
以下为算法的主要排序法
直接插入排序 3.
折半插入排序 4.
起泡排序 6.
简单选择排序 8.
希尔排序 10.
快速排序 12.
堆排序 15.
二路归并排序 18.
基数排序 20.
时间复杂度和空间复杂度对照表 23.
直接插入排序
一、 基本思想:
将数组分成两个小的数组,每次从后面的数组中取出索引最小的数组元素,插入到前面数组的适当位置,使得插入到前面的数组后,它前面的数组元素都比它小,而后面的元素都比它大。通常在开始进行排序的时候,就数组的第一个元素作为一个数组,而将后面的所有元素当成第一个数组。
二、 排序过程演示:
int[] arr ={52,22,7,100,23,19,123,10};
(选择第一个元素作为前面的数组): step 1:
【22 52】 7 100 23 19 123 10
step 2:
【7 22 52】 100 23 19 123 10
step 3:
【7 22 52 100】 23 19 123 10
step 4:
【7 22 23 52 100】 19 123 10
step 5:
【7 19 22 23 52 100】 123 10
step 6:
【7 19 22 23 52 100 123】 10
step 7:
【7 10 19 22 23 52 100 123】
三、 算法代码:
public class InjectionSort{
//插入排序方法
public static void injictionSort(int[] Number){
//第一个元素作为一部分,对后面的部分进行循环for(int j=1;jNumber.length;j++){
int tmp=Number[j]; int i=j-1;
while(tmpNumber[i]){
Number[i+1]=Number[i]; i--;
if(i==-1){
break;
}
}
Number[i+1]=tmp;
}
}
public static void main(String[] args){ int[] num={2,1,5,876,12,56};
injictionSort(num);
for(int i=0;inum.length;i++){ System.out.println(num[i]);
}
}
}
小结:
比较总次数 n-1=O(n)
移动次数 2*(n-1)=O(n)
最好的情况下,数组是有序的,不需要执行 while 语句,时间复杂度为 O(n); 最坏的情况下 t(n)=1+2+3+…….+(n-1)=1/2(n*n)-1/2n;时间复杂度为 O(n*n); 由此可知:平均复杂度=O(n*n)
折半插入排序
一、 基本思想:
每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,通过择半查找的方法,使数列依然有序;直到待排序数据元素全部插入完为止。
二、 排序过程演示
int[] arr={13 675 45 22 121 233 22 43 2 6}
step 1:
【13 675 45 22 121 233 22 43 2 6】
step 2:
【13 45 675 22 121 233 22 43 2 6】
step 3:
【13 22 45 675 121 233 22 43 2 6】
step 4:
【13 22 45 121 675 423 22 43 2 6】
step 5:
【13 22 45 121 233 675 22 43 2 6】
step 6:
【13 22 22 45 121 233 675 43 2 6】
step 7:
【13 22 22 43 45 121 233 675 2 6】
step 8:
【2 13 22 22 43 45 121 233 675 6】
step 9:
【2 6 13 22 22 43 45 121 233 675】
三、 算法代码:
public class HalfInsert{
public static void
文档评论(0)