原理:
比如现在是升序排序:那么每次都是在寻找当前剩余元素中的最小值,找到后与当前元素交换.
如下图所示:
代码实现:
是一个升序的代码:
3 void swap(int* a,int* b)
4 {
5 int tmp = *a;
6 *a = *b;
7 *b = tmp;
8 }
9 void SelectSort(int arr[],int size)
10 {
11 int i = 0;
12 int j = 0;
13 for(i = 0;i < size;++i)
14 {
15 for(j = i + 1;j < size;++j)
16 {
17 if(arr[i] > arr[j]) //如果要排降序,改为小于号即可
18 {
19 swap(&arr[i],&arr[j]);
20 }
21 }
22 }
23 }
选择排序与冒泡排序的比较:
选择排序是将当前元素与剩余元素相比较,找到最大或最小的元素替换为数组中剩余值的最小值或者最大值.而冒泡排序是每次比较相邻两个元素的大小,然后交换,将最小或者最大的元素放在数组中的最后,然后依次往前方.
时间复杂度
两次for循环,时间复杂度为O(N^2);
空间复杂度
在排序中并没有开辟新的空间,所以时间复杂度为O(1).