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

数据结构与算法学习-简单排序算法之冒泡排序与选择排序

2016-04-06 00:00 381 查看
摘要: 要想成为一个优秀的程序猿,数据结构与算法是必不可少的,冒泡排序与选择排序是基础的简单算法了,或许效率不咋地,但是思想是值得学习的

一直觉得自己底层的数据结构与算法很差,现在开始抽时间慢慢的学习,慢慢累积知识。刚看了简单的冒泡排序与选择排序,就顺便练练手写下来了。

1.冒泡排序

冒泡排序应该是最简单、最基础的排序了。原理也很简单:假设有长度为N的int数组,数组索引从0至N-1,从数组的最左端开始,比较位置0和位置1的大小,如果位置0的数大,则交换两个位置,否则什么都不做。然后右移一个位置,比较位置1和位置2的大小,同样的办法比较,如果位置1大,则继续交换位置。就按这样的方式一直比较下去,第一轮循环走完之后最大数就已经出来了,这时在数组的N-1位置上。按照同样的方法再遍历数组,第二大的数就出现在N-2的位置上了。就这样的比较下去,最终一个有序的数组就出来啦。可能讲的不好,直接上个书上看的截图,截图是说得身高,都是一个意思。





再上写的demo:

package com.freedwang.study.sort;

/**
* 冒泡排序
* Created by wangfei on 2016/4/6.
*/
public class BubbleSort {
private static int[] data = {1,3,6,9,2,4,15,12,18,19,14,11};

public static void sort() {
for (int i=0; i<data.length-1; i++) {
for (int j=0; j<data.length-1-i; j++) {
if (data[j] > data[j+1]) {
int temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}

public static void display() {
for (int i : data) {
System.out.println(i);
}
}

public static void main(String[] args) {
sort();
display();
}

}

2.选择排序

原理也比较简单:假设有长度为N的int数组,数组索引从0至N-1,从数组的最左端位置0开始,从位置1开始至数组的末端找到最小的值,记下这个值或者索引,然后拿这个值和位置0的值做比较,大于位置0的值则与位置0交换位置,此时最左边的就是整个数组最小的值了。再拿位置1的值与位置2至数组末端的最小值比较,如果比位置1小则交换位置,此时位置1就是数组第二小的值了,以此类推,最终又是一个有序的数组了。说的不明白再上图:





再上代码demo:

package com.freedwang.study.sort;

/**
* 选择排序
* Created by wangfei on 2016/4/6.
*/
public class SelectSort {
private static int[] data = {1,3,6,9,2,4,15,12,18,19,14,11};

public static void sort() {
for (int i=0; i<data.length-1; i++) {
int min = i;
for (int j=i+1; j<data.length; j++) {
if (data[j] < data[min]) {
min = j;
}
}
if (min != i) {
int temp = data[min];
data[min] = data[i];
data[i] = temp;
}
}
}

public static void display() {
for (int i : data) {
System.out.println(i);
}
}

public static void main(String[] args) {
sort();
display();
}
}

小结:

技术是一个慢慢积累的过程,监督自己学习,慢慢进步,加油!代码不敢保证正确性哈,写的不对的请指教,开源中国的第一篇博客出来了。继续搬砖!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息