空间复杂度为O(1)
时间复杂度为O(n 2)
第一次在数组n个元素中选取最小值放在第一位
第二次在n-1个元素中选取最小值放在第二位
结果
17 <--> 34
0: 17 48 39 21 56 34 80 52
21 <--> 48
1: 17 21 39 48 56 34 80 52
34 <--> 39
2: 17 21 34 48 56 39 80 52
39 <--> 48
3: 17 21 34 39 56 48 80 52
48 <--> 56
4: 17 21 34 39 48 56 80 52
52 <--> 56
5: 17 21 34 39 48 52 80 56
56 <--> 80
6: 17 21 34 39 48 52 56 80
时间复杂度为O(n 2)
第一次在数组n个元素中选取最小值放在第一位
第二次在n-1个元素中选取最小值放在第二位
- /*
- File: selectSort.cpp Time-stamp: <root 10/13/2008 13:19:13>
- Copyright: 2008 (C) waqy0816 <waqy0816@gmail.com>
- Description:
- */
- #include <iostream>
- using namespace std;
- int cnt = 0; //计算次数
- void Output(int array[], int n)
- {
- printf("%d:/t/t ", cnt++);
- for (int i=0; i<n; i++)
- {
- printf("%d ", array[i]);
- }
- printf("/n");
- }
- void swap(int &a, int &b)
- {
- printf("%d <--> %d/n", a, b);
- int temp;
- temp = a;
- a = b;
- b = temp;
- }
- /*
- 每次选取最小的值
- array为数组指针,n为数组大小
- */
- void selectSort(int array[], int n)
- {
- int min;
- for(int i=0; i<n; i++)
- {
- min = i;
- for(int j=i+1; j<n; j++)
- {
- if(array[j] < array[min])
- min = j;
- }
- if(min != i)
- {
- swap(array[min], array[i]);
- Output(array, n);
- }
- }
- }
- int main()
- {
- int a[8] = {34,48,39,21,56,17,80,52};
- selectSort(a, 8);
- return 0;
- }
结果
17 <--> 34
0: 17 48 39 21 56 34 80 52
21 <--> 48
1: 17 21 39 48 56 34 80 52
34 <--> 39
2: 17 21 34 48 56 39 80 52
39 <--> 48
3: 17 21 34 39 56 48 80 52
48 <--> 56
4: 17 21 34 39 48 56 80 52
52 <--> 56
5: 17 21 34 39 48 52 80 56
56 <--> 80
6: 17 21 34 39 48 52 56 80