首页 技术 正文
技术 2022年11月7日
0 收藏 943 点赞 268 浏览 1183 个字

Java排序算法之直接选择排序

基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上。第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,….,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,…..,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

Java代码实现:

public class Xuanze {
public static void main(String[] args) {
int [] s = {8,3,2,1,7,4,6,5};
int temp = 0;
for(int i=0;i<s.length-1;i++){
for(int j=i+1;j<s.length;j++){
if(s[i]>s[j]){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
for(int value:s)
System.out.print(value);
}
}

上面排序方法存在效率问题。因为当我们发现当前数比被比较数小的时候我们就交换两个数,其实我们可以把当前数的位置保存下来,等到第一次比较完后在进行交换。

public class Xuanze {    public static void main(String[] args) {        int [] s = {8,3,2,1,7,4,6,5};
int temp = 0;
for(int i=0;i<s.length-1;i++){
temp = i;
for(int j=i+1;j<s.length;j++){
if(s[temp]>s[j]){
temp=j; //保存位置
}
}
if(temp!=i) exchang(s,i,temp); //进行交换
}
for(int value:s)
System.out.print(value);
} private static void exchang(int[] s, int i, int j) {
int temp = s[j];
s[j]=s[i];
s[i]=temp;
}
}

算法性能分析:

时间复杂度:假设有n个数据,数据交换的次数最多为n-1次,但程序的总体的比较次数较多。所以综合考虑有直接选择排序的时间复杂度为O(n2)

    (n的平方)。所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。

空间复杂度:直接选择排序的空间复杂度很好,它只需要一个附加单元用于数据交换,所以其空间复杂度为O(1)。

稳定性:在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,948
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,474
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,287
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,102
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,734
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,769