3.选择排序

       选择排序(Selection Sort)  的基本思想是:每次从当前待排 序的记录中选取关键字最小的记录表,然后与待排序的记 录序列中的第一个记录进行交换,直到整个记录序列有序 为止。

01

 

02

 

 

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 void swap(int *a,int *b)/*交换*/
  6 {
  7     int tmp;
  8     tmp = *a;
  9     *a = *b;
 10     *b = tmp;
 11 }
 12 
 13 void print_array(int *a,int len)/*打印数组*/
 14 {
 15     int i;
 16 
 17     for(i = 0;i < len;i++)
 18     {
 19         printf("%5d",a[i]);
 20     }
 21 
 22     printf("\n");
 23 
 24 }
 25 
 26 int select_min(int *a,int start,int end)/*选择最小值*/
 27 {
 28     int i;
 29     int min = a[start];
 30     int min_pos = start;
 31 
 32     for(i = start;i < end;i++)
 33     {
 34         if(min > a[i])
 35         {
 36             min = a[i];
 37             min_pos = i;
 38         }
 39     }
 40 
 41     return min_pos;
 42 }
 43 
 44 void simple_select_sort(int *a,int n)/*简单的选择排序*/
 45 {
 46     int i = 0;
 47     int min_pos;
 48 
 49     for(i = 0;i < n;i++)
 50     {
 51         min_pos = select_min(a,i,n);
 52         swap(a + i,a + min_pos);
 53     }
 54 
 55 }
 56 
 57 int main()
 58 {
 59     int a[] = {11,7,9,3,2,5,6,4,1,20,99};
 60 
 61     int len = sizeof(a) / sizeof(a[0]);
 62 
 63     print_array(a,len);
 64     printf("\n");
 65     simple_select_sort(a,len);
 66 
 67     print_array(a,len);
 68 
 69     return 0;
 70 
 71 }     

03
04

 

05

 

06
07
08
09
10
11
12

 

 40             i++;
 41         }
 42 
 43         if(root_value >= v[i])
 44         {
 45             break;
 46         }else
 47         {
 48             v[parent] = v[i];
 49             parent = i;
 50         }
 51     }
 52 
 53     v[parent] = root_value;
 54 }
 55 
 56 void heap_sort(int v[],int len)
 57 {
 58     int i;
 59 
 60     for(i = len / 2 - 1;i >= 0;i--)/*1.构建大根堆*/
 61     {
 62         adjust_heap(v,i,len);
 63     }
 64 
 65     for(i = len - 1;i > 0;i--)/*2.调整堆结构,交换栈顶元素与末尾元素*/
 66     {
 67         swap(v,v + i);
 68 
 69         adjust_heap(v,0,i);/*调整堆栈*/
 70     }
 71 }
 72 
 73 int main()
 74 {
 75     int a[] = {11,7,9,3,2,5,6,4,1,20,99};
 76 
 77     int len = sizeof(a) / sizeof(a[0]);
 78 
 79     print_array(a,len);
 80     printf("\n");
 81     heap_sort(a,len);
 82 
 83     print_array(a,len);
 84 
 85     return 0;
 86 
 87 }

结果相同

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值