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

关于数据结构中冒泡排序和选择排序的总结

2016-07-08 18:40 232 查看
今天在看数据结构的时候,刚好看到数据结构中的冒泡排序和选择排序。

现在就把关于冒泡排序和选择排序进行总结,免得自己以后忘记。

冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

冒泡排序可以从最后一个元素开始,以此比较两个相邻的值,谁的值小,就在前面,当一趟比较晚的时候,数组中最小的数字就在第一个元素的位置上,以此进行循环,可以总结如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从最后一对到开始的第一对。在这一点,开始的元素应该会是最小的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

public static
4000
void sort(long[] arr){
long tem = 0;
//这是第几趟
for(int i = 0;i<arr.length - 1;i++){
for(int j = arr.length- 1;j > i;j--){
if(arr[j]<arr[j-1]){
tem = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tem;
}
}
}
}

选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

我们先假设数组的第一个元素是最小的,定义一个值K记录第一个的下标,然后开始循环,从第二个数开始循环,当第二个数比第一个数小的时候,K指向第二个数,以此类推,循环一趟下来,K指向的数比第一个数小,这时候进行数值的交换。以此进行循环,

可以总结为:

对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。

public static void sort(long[] arr){
int k = 0;
long tem;
for(int i = 0;i<arr.length -1;i++){
for(int j = i;j<arr.length;j++){
if(arr[j] < arr[k]){
k = j;
}
}
tem = arr[i];
arr[i] = arr[k];
arr[k] = tem;

}
}


从上面的代码中就可以看出来选择排序的效率比冒泡排序的效率高
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: