一、选择排序
选择排序:每一轮找到最小的元素,放在最前面
-
原理
• 将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
• 循环第 1 条规则,找出最小元素,放于第 1 个位置
• 经过 n-1 轮比较完成排序
简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
数组: ary={8 , 2 , 3 , 7 , 1}
第 1 轮: ary={1 | 8 , 3 , 7 , 2}
第 2 轮: ary={1 , 2 | 8 , 7 , 3}
第 3 轮: ary={1 , 2 , 3 | 8 , 7}
第 4 轮: ary={1 , 2 , 3 , 7 | 8}
第 5 轮: ary={1 , 2 , 3 , 7 | 8} -
过程分析
• i 代表第一个数据的位置
• j 代码后部每一个数据的位置
备注:
• i 的范围是: 0 ~ <ary.length - 1
• j 的范围是: i+1 ~ <ary.length
• 交换步骤(ary[i]<->ary[j])的代码如下:
if(ary[i]>ary[j]){
int temp = ary[i];
ary[i]=ary[j];
ary[j]=temp;
}
- 代码
二、冒泡排序
冒泡排序:比较相邻的两个元素,小的放前面
-
原理
• 比较相邻的元素,将小的放到前面。
冒泡排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
ary={8,2,3,7,1}
ary={2,8,3,7,1}
ary={2,3,8,7,1}
ary={2,3,7,8,1}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,1|7,8}
ary={2,3,1|7,8}
ary={2,1|3,7,8}
ary={1,2,3,7,8} -
过程分析
• i 代表次数
• j 代表比较位置
备注:
• i 的取值范围是: i = 0 ~ <ary.length-1
• j 的取值范围是: j = 0 ~ <ary.length - i -1
• 交换步骤伪代码如下:
if([j]>[j+1]){
[j]<->[j+1]
}
- 代码
三、插入排序
插入排序:将数组分成两个部分,后一部分的元素逐个与前一部分每个比较,在合理位置插入
-
原理
-
过程分析
• temp 代表取出待插入的元素
• i 代表后组待插入元素的位置
• j 代表前组每个元素的位置
备注:
• i 的取值范围是: i=1 ~ <ary.length i++
• j 的取值范围是: j= i-1 ~ >=0, j-- j–
• 伪代码如下:
temp = [i];
if (temp<[j]) {
[j]->[j+1] //移动
} else {
break j;
}
temp->[j+1]; //插入
- 代码