黑马程序员技术交流社区
标题:
ArrayList排序
[打印本页]
作者:
岳路遥_rockman
时间:
2015-9-6 21:58
标题:
ArrayList排序
谁能告诉我ArrayList排序有几种方法 要全面点
作者:
残影
时间:
2015-9-6 22:18
排序不都那几种么。。选择,冒泡,折半,什么的
作者:
keto
时间:
2015-9-6 22:36
本帖最后由 keto 于 2015-9-6 22:37 编辑
package cn.itcast.demo13_冒泡排序;
/*
* 冒泡排序:将每个元素取出,跟相邻的元素进行比较,如果从小到大排序,判断当前元素如果大于相邻元素,则进行交换。
*
*/
public class Demo {
public static void main(String[] args) {
int[] arr = {3,24,32,36,7,8};
//冒泡排序
for(int i = 0; i < arr.length - 1 ; i++){//外层循环控制循环次数
for(int j = 0 ; j < arr.length - 1 - i ; j++){//内层循环用于取数字,并比较
if(arr[ j ] > arr[ j + 1] ){
//交换
int temp = arr[ j ];
arr[ j ] = arr[ j + 1];
arr[ j + 1] = temp;
}
}
}
printArray(arr);
}
public static void printArray(int[] arr){
for(int i = 0;i < arr.length ; i++){
System.out.println(arr
);
}
}
}
作者:
keto
时间:
2015-9-6 22:37
package cn.itcast.demo14_选择排序;
/*
* 选择排序:
*
* 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
*/
public class Demo {
public static void main(String[] args) {
int[] arr = {88,45,75,20,10};
//方式一:比较一次,就交换一次。由于有很多的无效交换,所以效率低。
/*for(int i = 0;i < arr.length - 1 ; i++){
for(int j = i + 1 ; j < arr.length ; j++){
//判断如果i > j的数,就交换
if(arr[i] > arr[j]){
//交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printArray(arr);*/
//方式二:先进行判断,并寻找最小数,找到后,不交换,只记录索引值。每个数都遍历了之后,每一轮的最后只进行一次交换。
//大家晚自习思考:
//实际上,上边的实现方式,有很多无效的交换:这种交换,不是最终的结果。
//大家考虑:实际上每一轮都是找最小数的过程,找到后,跟第一个数一交换,只要保证第一个数是最小的就可以。
for(int i = 0;i < arr.length - 1 ;i ++){
//思路:找最小的数,然后把最小数的索引记录下来,最后再进行交换
int minIndex = i;//假设第一个数就是最小的,将索引记录下来
for(int j = i + 1; j < arr.length ; j++){
if(arr[minIndex] > arr[j]){
//不交换,把索引记录下来
minIndex = j;
}
}
//内部的j循环一结束,minIndex记录的就是最小数的索引
if(minIndex != i){//有其它更小的数,执行交换
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
printArray(arr);
}
public static void printArray(int[] arr){
for(int i = 0;i < arr.length ; i++){
System.out.println(arr[i]);
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2