C 语言常用算法
2.排序
( 1)冒泡排序(起泡排序)
假设要对含有 n 个数的序列进行升序排列,冒泡排序算法步骤是:
①从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前
者大后者小,则交换两数的位置;
②第①趟结束后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开始到倒数
第二个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
③重复步骤① n-1 趟,每趟比前一趟少比较一次,即可完成所求。
例 1、任意读入 10 个整数,将其用冒泡法按升序排列后输出。
#define n 10
main()
{int a[n],i,j,t;
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(j=1;j<=n-1;j++) /*n 个数处理 n-1 趟*/
for(i=0;i<=n-1-j;i++) /* 每趟比前一趟少比较一次 */
if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<n;i++) printf("%d\n",a[i]);}
( 2)选择法排序
选择法排序是相对好理解的排序算法。假设要对含有 n 个数的序列进行升序排列,算法步骤是:
①从数组存放的 n 个数中找出最小数的下标 (算法见下面的 “求最值 ”),然后将最小数与第 1
个数交换位置;
②除第 1 个数以外,再从其余 n-1 个数中找出最小数(即 n 个数中的次小数)的下标, 将此数
与第 2 个数交换位置;
③重复步骤① n-1 趟,即可完成所求。
例 1、任意读入 10 个整数,将其用选择法按升序排列后输出。
#define n 10
main()
{int a[n],i,j,k,t;
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /* 处理 n-1 趟*/
{k = i; /* 总是假设此趟处理的第一个(即全部数的第 i 个)数最小, k 记录其下标 */
for(j=i+1;j<n;j++)
if(a[j] < a[k]) k = j;
if (k != i){t = a[i]; a[i] = a[k]; a[k] = t;}
}
for(i=0;i<n;i++)
printf("%d\n",a[i]); }
( 3)插入法排序
要想很好地掌握此算法,先请了解“有序序列的插入算法” ,就是将某数据插入到一个有序序
列后,该序列仍然有序。插入算法参见下面的“ 数组元素的插入 ”。
评论0
最新资源