数据结构-排序(选择排序)

本文提供了直接选择排序和堆排序两种经典排序算法的C语言实现及运行结果。通过具体代码展示了这两种算法的工作原理,并以相同的初始数组进行排序演示,验证了算法的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContractedBlock.gifCode 

1.直接选择算法

 1 // 直接选择排序
 2 //Code by Larman Yuan 2009-06-29
 3 
 4 #include "stdafx.h"
 5 
 6 void selectSort(int * sortArray, int size)
 7 {
 8     int i,j,k, temp;
 9     for( i = 0; i < size - 1; i++)
10     {
11         k = i;
12         for(j = i + 1; j < size; j++)
13         {
14             if(sortArray[j] < sortArray[k])
15             {
16                 k = j;
17             }
18         }
19         if(k != i)
20         {
21             temp = sortArray[k];
22             sortArray[k] = sortArray[i];
23             sortArray[i] = temp;
24         }
25     }
26 }
27 
28 void printArray(int arrayToPrint[],int size)
29 {
30        for(int i = 0; i < size; i++)
31     {
32         printf("%d ", arrayToPrint[i]);
33     }
34     printf("\n");
35 }
36 
37 int _tmain(int argc, _TCHAR* argv[])
38 {
39     int  sortArray[8= {49386597,76132749};
40     printf("Array before sort: ");
41     printArray(sortArray, 8);
42     selectSort(sortArray, 8);
43         printf("Array after sort : ");
44     printArray(sortArray, 8);
45     return 0;
46 }

运行结果 :

 Array before sort: 49 38 65 97 76 13 27 49 

Array after sort : 13 27 38 49 49 65 76 97 

2.堆排序
 1 // 堆排序
 2 //Code by Larman Yuan 2009-06-29
 3 
 4 #include "stdafx.h"
 5 #define leftChild(i) 2*(i)+1
 6 
 7 void sift(int* sortArray, int i, int size)
 8 {
 9     int child;
10     int temp;
11     temp = sortArray[i];
12     child = leftChild(i);
13     while(child < size)
14     {
15         if((child < size - 1&& (sortArray[child] < sortArray[child + 1]))
16             child++;
17         if(temp < sortArray[child])
18         {
19             sortArray[i] = sortArray[child];
20             i = child;
21             child = leftChild(i);
22         }
23         else
24             break;
25     }
26     sortArray[i] = temp;
27 }
28 
29 void heapSort(int * sortArray, int size)
30 {
31     int i, n, temp;
32     n = size;
33     for(i = n / 2 - 1; i >= 0; i--)
34     {
35         sift(sortArray, i, n);
36     }
37     for(i = n - 1; i > 0; i--)
38     {
39         temp = sortArray[0];
40         sortArray[0= sortArray[i];
41         sortArray[i] = temp;
42         sift(sortArray, 0, i);
43     }
44 }
45 
46 void printArray(int arrayToPrint[],int size)
47 {
48        for(int i = 0; i < size; i++)
49     {
50         printf("%d ", arrayToPrint[i]);
51     }
52     printf("\n");
53 }
54 
55 int _tmain(int argc, _TCHAR* argv[])
56 {
57     int  sortArray[8= {49386597,76132749};
58     printf("Array before sort: ");
59     printArray(sortArray, 8);
60     heapSort(sortArray, 8);
61         printf("Array after sort : ");
62     printArray(sortArray, 8);
63     return 0;
64 }

运行结果:

Array before sort: 49 38 65 97 76 13 27 49 

Array after sort : 13 27 38 49 49 65 76 97 

 

转载于:https://www.cnblogs.com/LarmanYuan/archive/2009/06/29/1513304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值