您的位置:首页 > 其它

常用排序算法总结

2013-09-24 00:21 267 查看
总结些常见的排序算法,方便以后可以重用。

数据量不大,为了表达方便就直接使用了数组。

int[] data = null;
data = new int[] { 1, 7, 2, 3, 8, 4 };


1.冒泡排序

// 冒泡排序,从小到大排序
		for (int i = 0; i < data.length; i++) {
			for (int j = i+1; j < data.length; j++) {
				if (data[j-1]>data[j]) {
					int index = data[j-1];
					data[j-1] = data[j];
					data[j] = index;
				}
			}
		}


冒泡排序就是说,排序的过程像水里往上冒的气泡一样,每个数字代表一个气泡。值小的气泡就轻,就会跑过值大的气泡。每次循环的时候,都是临近的两个气泡之间进行比较,值小的气泡就交换,直到最后气泡都顺序排列为止。

2.选择排序

// 选择排序,从小到大的顺序排序
        for (int i = 0; i < data.length; i++) {
            for (int j = i + 1; j < data.length; j++) {
                if (data[i] > data[j]) {
                    int index = data[i];
                    data[i] = data[j];
                    data[j] = index;
                }
            }
        }

选择排序也是一种常见的排序方法,排序的过程很简单。比如说,学校军训的时候教官首先得按各种高矮排好队伍,从矮到高,从左到右排队伍。看到第1个人比第3个高的话,会怎么办呢,当然是直接交换两个人的位置就是了。这样的把最矮的依次的选出来排在前面的方法就跟这里描述的过程差不多。

ps:

当然,在实际的过程中,中间又有更多的灵活的排列方式,这里咋不讨论。

3.简单插入排序

// 简单插入排序
		for (int i = 1; i < data.length; i++) {
			// 获取缓存的数字
			int temp = data[i];
			// 获取当前的位置
			int j = i;
			// 当有序最大的数字大于外围数字
			if (data[j - 1] > temp) {
				// 依次向后移动一位,直到不大于外围数字
				while (j > 1 && data[j - 1] > temp) {
					data[j] = data[j - 1];
					j--;
				}
			}
			// 将外围数字插入到指定位置
			data[j] = temp;
		}

插入排序的执行效率不高,每次都要去移位。

插入排序的过程,主要是针对已排序好的队列,然后再放入一个数字的过程。就跟在一叠已经排好的扑克牌中放入一个5,你就直接的将5放在6的后面就可以了,在这个过程总,5后面的排都会向后面移动一个位置(假如,每个牌都单独的放在一个位置上的话)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: