选择排序

空间复杂度为O(1)
时间复杂度为O(n 2)

第一次在数组n个元素中选取最小值放在第一位
第二次在n-1个元素中选取最小值放在第二位

  1. /*
  2.   File: selectSort.cpp  Time-stamp: <root 10/13/2008 13:19:13>
  3.   Copyright: 2008 (C) waqy0816 <waqy0816@gmail.com>
  4.   Description:
  5. */
  6. #include <iostream>
  7. using namespace std;
  8. int cnt = 0; //计算次数
  9. void Output(int array[], int n)
  10. {
  11.     printf("%d:/t/t ", cnt++);
  12.     for (int i=0; i<n; i++)
  13.     {
  14.         printf("%d ", array[i]);
  15.     }
  16.     printf("/n");
  17. }
  18. void swap(int &a, int &b)
  19. {
  20.   printf("%d <--> %d/n", a, b);
  21.   int temp;
  22.   temp = a;
  23.   a = b;
  24.   b = temp;
  25. }
  26. /*
  27.   每次选取最小的值
  28.   array为数组指针,n为数组大小
  29.  */
  30. void selectSort(int array[], int n)
  31. {
  32.   int min;
  33.   
  34.   for(int i=0; i<n; i++)
  35.     {
  36.       min = i;
  37.       for(int j=i+1; j<n; j++)
  38.     {
  39.       if(array[j] < array[min])
  40.         min = j;
  41.     }
  42.       if(min != i)
  43.     {
  44.       swap(array[min], array[i]);
  45.       Output(array, n);
  46.     }
  47.     }
  48. }
  49. int main()
  50. {
  51.   int a[8] = {34,48,39,21,56,17,80,52};
  52.   selectSort(a, 8);
  53.   return 0;
  54. }
  55.   

结果
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值