“这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战”
关注我,以下内容持续更新
选择排序
选择排序的核心是选择,将整个待排序的记录序列划分成有序区和无序区,左边是有序区,右边是无序区,从右边无序区找出最小值的位置,与左边有序区最后一个元素交换, 对于n个元素的序列,最多经过n-1轮排序,就可以将所有元素排好序.
基本思路: 双层循环,先假设第1个元素最小即min=0。第一次从arr[1]~arr[n-1]中选取最小值,与arr[0]交换;第二次从arr[2]~arr[n-1]中选取最小值,与arr[1]交换;第三次从arr[3]~arr[n-1]中选取最小值,与arr[2]交换;…;第i次从arr[i]~arr[n-1]中选取最小值,与arr[i-1]交换;总共通过n-1次循环,得到一个按排序码从小到大排列的有序序列。
代码逻辑: 双层循环,先假设第1个元素最小即min=0,每一轮内层循环都是arr[min]和后边的每个arr[i]进行对比,若比arr[min]小就让min=i,第一轮内层循环走完后,交换第1个元素和第min个元素,此时最小排在最左边。第二轮内层循环就少循环第一位,第二轮循环走完后,交换第2个元素和第min个元素,此时第二小已经排在第二位。第n轮内层循环走完后,交换第n个元素和第min个元素。
代码实现
//选择排序
-(void)selectSort:(NSMutableArray*)arr{
for (int i = 0; i<arr.count; i++) {
int min = i;
for (int j = i; j<arr.count; j++) {
if ([arr[min+1] intValue] > [arr[j] intValue]) {
min = j;
}
}
NSNumber*tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}
选择排序比没有优化过的冒泡排序快,因为交换次数少。
其他排序算法
如果觉得我写的不错 请给我点个赞 您的支持是我最大的动力