14、排序算法c语言描述---选择排序

排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析。

文章规划:

一。通过自己对排序算法本身的理解,对每个方法写个小测试程序。 具体思路分析不展开描述。

二。通过《大话数据结构》一书的截图,详细分析该算法 。 

在此,推荐下程杰老师的《大话数据结构》一书,当然不是打广告,只是以一名读者的身份来客观的看待这本书,确实是通俗易懂,值得一看。

 

②选择排序

 

一。个人理解

选择排序思路:

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列的起始位置。以此类推,直到所有元素均排序完毕。

具体做法是:

选择最小的元素与未排序部分的首部交换,使得序列的前面为有序。 

通俗的说,就是每次循环找到未排序序列中的最小元素放到起始位置。直至循环n-1次遍历全部的。

选择排序也比较简单易懂,下面直接上代码。

[cpp]  view plain copy
  1. #include<stdio.h>  
  2. // 打印结果  
  3. void Show(int  arr[] , int n)  
  4. {  
  5.     int i;  
  6.     for ( i=0; i<n; i++ )  
  7.         printf("%d  ", arr[i]);  
  8.     printf("\n");  
  9. }  
  10. // 交换数组元素位置  
  11. void Swap( int *num_a, int *num_b )  
  12. {  
  13.     int temp = *num_b;  
  14.     *num_b = *num_a;  
  15.     *num_a = temp;  
  16. }  
  17. // 选择排序  
  18. void SelectSort( int *arr, int n )  
  19. {  
  20.     int i, j, min_;   //min_ 为最小值下标  
  21.     for ( i=0; i<n-1; i++ )  //控制n-1趟的选择步骤  
  22.     {  
  23.         min_ = i;              //将当前下标定义为最小值下标  
  24.         for ( j=i+1; j<n; j++ )    //在arr[i],arr[i+1],...,arr[n-1]中选键值最小的结点  
  25.         {  
  26.             if ( arr[min_] > arr[j] )  
  27.                 min_ = j;     //如果有小于当前最小值的,把下标赋值给min_  
  28.         }  
  29.         if ( i != min_ )  
  30.             Swap( &arr[i], &arr[min_]);   //如果min_不等于初始值,说明找到最小值,交换。  
  31.     }  
  32. }  
  33.   
  34. int main()  
  35. {   //测试数据  
  36.     int arr_test[10] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 };  
  37.     //排序前数组序列  
  38.     Show( arr_test, 10 );  
  39.     SelectSort( arr_test, 10 );  
  40.     //排序后数组序列  
  41.     Show( arr_test, 10 );  
  42.     return 0;  
  43. }  


二。 《大话数据结构》一书截图分析

注:本文仅为分享知识,绝无商业用途。

如果以该种形式分享知识造成不必要的纠纷,还请第一时间告知。

 

更多 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值