数据结构之排序 -----冒泡排序和选择排序
2016-11-26 23:42
197 查看
1、冒泡排序法
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
分析:
第一次比较排序的结果:会把其中最大的数据排到最大的索引处
第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,
所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
第四次:少3个..
综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,
而随着比较的次数的增加,每次要进行比较的数据依次减少,也就是
for(int x =0; x < arr.length - 1 ;x++)这个是总的比较的次数
{
for(int y =0; y < arr.length - 1 - x; x++){ 这个就是随着次数的增加,每次要进行比较的数据的个数
}
}
为了方便对多个数组进行冒泡排序,所以把它写成一个方法:
两要素:
a:返回类型:void
b:参数列表:int[] arr
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
分析:
A:首先是0索引上的数据依次跟后面各个索引上的数据进行比较,
直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,
接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较
例如:{22,11,13,10} 22跟11比后,变成{11,22,13,10},接着11继续跟13、10比较,遇到10后,变成{10,22,13,11}
也就是说,进行完A后,0索引上的数据肯定是这个数组上最小的数据
B:接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
C:跟B一样,就这样进行下去,知道全部都比较完毕。
D:总结上面,得出总共需要进行几次A步骤的次数:
如果是5个数据的数组的话,就一共需要比较arr.length(4)次,若从0开始计数,则是 4-1 = 3次
而每次比较时,所参与的索引的数据是不一样的:
第一次时,是0和1以及后面的数据比较;
第二次时,是1和2以及后面的数据比较
...
E:从D得出
for(int x = 0; x< arr.length - 1; x++){
for(int y = x+1; y < arr.length ;y++){
}
}
F:用E的方法得出排序后的数组后,再进行数组遍历输出。
G:排序和遍历都用方法来表示,以方便以后的使用
a:返回类型:无,void
b:参数列表:int[] arr
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
分析:
第一次比较排序的结果:会把其中最大的数据排到最大的索引处
第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,
所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
第四次:少3个..
综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,
而随着比较的次数的增加,每次要进行比较的数据依次减少,也就是
for(int x =0; x < arr.length - 1 ;x++)这个是总的比较的次数
{
for(int y =0; y < arr.length - 1 - x; x++){ 这个就是随着次数的增加,每次要进行比较的数据的个数
}
}
为了方便对多个数组进行冒泡排序,所以把它写成一个方法:
两要素:
a:返回类型:void
b:参数列表:int[] arr
//定义冒泡排序的方法 public static void bubbleSort(int[] arr){ //确定要进行比较的次数 // arr.length - 1是为了防止数据越界 // arr.length - 1 - x是为了减少比较的次数 for(int x = 0;x < arr.length - 1; x++){ //定义每次要比较的数据随着比较的次数的减少而减少 for(int y = 0;y < arr.length - 1 - x ; y++){ //每次比较后,要对每个数组里的元素进行比较,并排序 if(arr[y] > arr[y+1]){ //进行排序 int temp = arr[y]; arr[y] = arr[y + 1]; arr[y + 1] = temp; } } } }2、 数组排序之选择排序:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
分析:
A:首先是0索引上的数据依次跟后面各个索引上的数据进行比较,
直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,
接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较
例如:{22,11,13,10} 22跟11比后,变成{11,22,13,10},接着11继续跟13、10比较,遇到10后,变成{10,22,13,11}
也就是说,进行完A后,0索引上的数据肯定是这个数组上最小的数据
B:接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
C:跟B一样,就这样进行下去,知道全部都比较完毕。
D:总结上面,得出总共需要进行几次A步骤的次数:
如果是5个数据的数组的话,就一共需要比较arr.length(4)次,若从0开始计数,则是 4-1 = 3次
而每次比较时,所参与的索引的数据是不一样的:
第一次时,是0和1以及后面的数据比较;
第二次时,是1和2以及后面的数据比较
...
E:从D得出
for(int x = 0; x< arr.length - 1; x++){
for(int y = x+1; y < arr.length ;y++){
}
}
F:用E的方法得出排序后的数组后,再进行数组遍历输出。
G:排序和遍历都用方法来表示,以方便以后的使用
a:返回类型:无,void
b:参数列表:int[] arr
//定义排序方法 public static void choose(int[] arr){ //定义进行A步骤的次数 for(int x = 0; x < arr.length - 1; x ++ ){ //定义每次参与比较的数据个数 for(int y = x + 1;y < arr.length ; y++){ //进行数据的比较 if( arr[x] > arr[y]){ //对数据进行排序 int temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } } } }
相关文章推荐
- 第十节 数据结构之冒泡排序、选择排序
- Java 数据结构----冒泡排序 选择排序
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 【数据结构】Java实现各类经典排序算法——选择排序、冒泡排序
- 关于数据结构中冒泡排序和选择排序的总结
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 数据结构之基础排序(选择排序、插入排序、冒泡排序)
- 数据结构-冒泡排序与选择排序
- 数据结构与算法——冒泡排序,选择排序,直接插入排序
- (九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序
- 数据结构只选择排序、冒泡排序、插入排序
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 数据结构排序,冒泡,快速,直接选择,直接插入,希尔
- 数据结构,冒泡排序,快速排序,插入排序,shell排序
- 选择排序和冒泡排序
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 冒泡排序-----选择排序
- JavaScript 冒泡排序和选择排序的实现代码
- 选择排序和冒泡排序(JAVA)