数据结构(七)排序---简单选择排序
一:简单选择排序
定义:
简单选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之
就是我们从第一个开始循环,获取到最小的就与第一个交换,然后走到第二个位置,找到剩下元素中最小的,和第二个交换,每次循环都是获取最小的数,所以最后排序出来的就是一串从小到大的数据
实现:
{ 5, 2, 6, 0, 3, 9, 1, 7, 4, 8 }
void SelectSort(SqList *L) { int i, j, min,count1,count2; count1 = count2 = 0; for (i = 1; i < L->length;i++) { min = i; //将当前下标定义为最小值下标 for (j = i + 1; j <= L->length;j++) //循环之后的数据 { count1++; if (L->r[min]>L->r[j]) //如果由小于当前最小值的关键字 min = j; //更新最小值 } if (i != min) //若是我们在上面循环中找到最小值,则min会改变,与i不同,就需要进行交换 { swap(L, i, min); count2++; } } printf("loop count:%d, swap count:%d\n", count1, count2); }
性能分析:
和上面的冒泡排序相比交换次数变少了,但是和最终版的冒泡比较,可能循环次数不如人家
时间复杂度为O(n*(n-1)/2)-->O(n^2)
简单选择排序的性能要略优于冒泡排序