您的位置:首页 > 理论基础 > 数据结构算法

java数据结构和算法-1,简单排序

2017-05-18 22:48 197 查看
在java数据结构和算法中,简单排序分为冒泡排序、选择排序、插入排序三种,也是最基础的三种,

废话不多,码上见!

1、冒泡排序

public class BubbleSort{

public static void sort(int[] arr){
//临时变量,用于数据交换,如果不用临时变量的话用运算符或者增加操作步骤也能实现;
int temp = 0;
//一个for循环用于遍历一次数组中的数据
for (int i = 0; i < arr.length -1; i++) {
//第二个for循环为了让每一个数组中的数据都去对比一次数组中的数据,初学的时候不知道为什么就是不会!!!太笨了~(* ̄ω ̄)~
for (int j = arr.length -1; j > i; j--) {
if (arr[j] < arr[i]) {//正在往上冒的数据如果遇到小于它的数据就交换位置
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
//打印排序后的数据
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);

}
}
public static void main(String[] args) {
int[] arr = {23,43,5,71};//声明一个int类型数组,用于排序
sort(arr);//执行排序方法
}
}


输出结果:

5
23
43
71


重点:

数据从底部开始往上排

遇到比自身大的数继续排,直到遇到小于等于自身的数为止

2、插入排序

//这次没有另外写方法了,直接放main里
public static void main(String[] args) {
int[] arr = {19,65,1,8,33,45,21,6};//声明一个int类型数组,用于排序
int temp = 0;//临时变量用于交换数据
int k = 0;//起到游标的作用,记录需要插入的位置
for (int i = 1; i < arr.length; i++) {
k = i;
temp = arr[i];//记录正在排序的那个数
while(k > 0 && temp <= arr[k-1]){//判断从后往前正在排序的那一个是否已经到头了,以及判断前一个数是否比自身大
arr[k] = arr[k-1];//把比temp大的数往后移
k--;//记录当前数据往后移之后,“空出来的”,需要插入的位置
}
arr[k] = temp;//最后把数据放到需要的插入的位置
}
//打印排序后的结果
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}


输出结果

1
6
8
19
21
33
45
65


重点:

插入排序是从第二个数开始排的,用第二个数开始,然后和前面的数进行比较,并不是和冒泡一样比较所有的数。

插叙排序的效率比冒泡要高,因为不用每个数据都和数组中的数据对比一遍

其实和冒泡差不多,只是冒泡是每比较一次数据就交换一次,这里插入排序一轮比较之后交换的次数是1,其他的都是把前面的数移动到了后面,没有数据交换。

3、选择排序

public static void sort(int[] arr){
int k;//起到游标的作用,记录要交换的位置
int temp;//临时变量用于交换数据
for (int i = 0; i < arr.length; i++) {
k = i;//记录开始的时候要排序的数所在的位置
for (int j = i; j < arr.length; j++) {//从当前位置(arr[k])往后比较
if (arr[j]<arr[k]) {//在比较数据的时候如果遇到后面的数比自身小,就记录后面的数的位置
k = j;
}
}
temp = arr[i];//在最后执行数据交换
arr[i] = arr[k];
arr[k] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);

}
}

public static void main(String[] args) {
int[] arr = {9,15,4,2,99};//声明一个int类型数组,用于排序
sort(arr);
}


输出结果

2
4
9
15
99


重点:

和插入排序一样需要有游标

排序中比较完数据之后不作数据交换的操作,而是记录要交换的位置

效率在这三个中最高,因为全程执行的数据交换操作最少
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: