简单选择排序
简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
简单选择排序思路
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止
简单选择排序运行过程
初始值: 3 1 5 7 2 4 9 6
第一趟: 1 3 5 7 2 4 9 6
第二趟: 1 2 5 7 3 4 9 6
第三趟: 1 2 3 7 5 4 9 6
第四趟: 1 2 3 4 5 7 9 6
第五趟: 1 2 3 4 5 7 9 6
第六趟: 1 2 3 4 5 6 9 7
第七趟: 1 2 3 4 5 6 7 9
第八趟: 1 2 3 4 5 6 7 9
简单选择排序代码
- (void)sampleSelectSort {
for (int i = 0; i < self.marray.count - 1; i ++) {
for (int j = i + 1; j < self.marray.count; j ++) {
if (self.marray[j] < self.marray[i]) {
[self.marray exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
}
性能(算法时间、空间复杂度、稳定性)分析
时间复杂度
比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,空间复杂度为O(n^2)。
空间复杂度
空间复杂度为O(n)。
稳定性
简单选择排序是一种不稳定排序算法。