记录自己的CSDN的第一个小博客,也记录备考研究生的一个过程。
前言
做这个系列的博客也是希望把自己在备考研究生期间遇到的一些小问题或者小总结分享给大家,希望能够互相学习,我也会经常更新@
一、冒泡排序
1.基本思想
冒泡排序的基本思路是:每次将相邻的两个数做比较,然后将小的数调到前面。
比如有六个数:10,23,9,5,1,12,第一次将前面相邻的两个数10,23相比较,小的数往上调,然后比较23,9,9小往上调···· 如图所示,以此类推一共比较五次,第一轮的比较将会把最大的一个数沉底。接着进行第二轮(只对10,9,5,1,12)比较,按照上面方法经过四次比较,将里面最大的数沉底。按照这个规律进行下去,可以知道,如果有n个数,要进行 n 轮比较,在第一轮要进行 n 次比较,在第 j 轮要进行 n-j 次比较。
代码如下:
#include <stdio.h>
int main()
{
int a[6];
int i, j, t;
printf("input 6 numbers:\n");
for (i = 0; i < 6; i++)
scanf_s("%d", &a[i]);
printf("\n");
for(j=0;j<5;j++) //进行5次循环,5次比较
for(i=0;i<5-j;i++) //在每一次的循环中进行5-j次比较
if (a[i] > a[i + 1])//只是相邻两个数之间的比较
{
t = a[i], a[i] = a[i + 1], a[i + 1] = t;//比较后的调换位置
}
printf("the sorted numbers :\n");
for (i = 0; i < 6; i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}
运行结果:
二、选择排序
1.基本思想
选择法的基本思路是:在一组数据中,从待排序的数据中选出最小(或最大)的数,将其放置与 a[0] 的位置,然后,再从剩余未排序元素中继续寻找最小(大)的数,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
假设有六个数,10,23,9,5,1,12,第一次将最小的 1 放置到 a[0] 位置,第二次再将剩余五个数中最小的 5 放置于 a[1] 的位置,以此类推。
#include<stdio.h>
int main()
{
void sort(int array[], int n);
int a[6], i;
printf("enter array:\n");
for (i = 0; i < 6; i++)
scanf_s("%d", &a[i]);
sort(a, 6);//调用sort函数,a是数组名,大小为6
printf("The sorted array:\n");
for (i = 0; i < 6; i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}
void sort(int array[], int n)
{
int i, j, k, t;
for (i = 0; i < 6; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (array[j] < array[k])
k = j;
t = array[k]; array[k] = array[i]; array[i] = t;
}
}
运行结果:
三、插入排序
1.基本思想
插入法的基本思路是:将一个元素与一组有序的序列进行比较,在比较之后插入到已排好序的序列中从而形成一个新的有序序列,并将这一过程重复多次。
这个就类似于抽扑克牌,比如一副扑克,在抽取第一张的时候是一个 6 ,将其放在最上面,然后排序从第二张开始,如果第第二张是 3 ,则将 3 放置在6的上面,然后抽取第四张,第四张是 1 的话,又将其放在 3 的上面,以此类推,将抽出的牌插入到一个有序的序列中去,从而形成一个新的序列,自此排序完成。
#include <stdio.h>
int main()
{
void sort(int a[], int n);
int a[10] = {10,23,9,5,1,12},i;
sort(a, 6);
printf("the sorted a:\n");
for (i = 0; i < 6; i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}
void sort(int a[], int n)
{
int i, j, t;
for (i = 1; i < n; i++)//第一个数看做有序的,把后面的数据一个一个的插入到前面
{
t = a[i];
j = i - 1;
while (j >= 0 && a[j] > t)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = t;
}
}
总结
这些就是我在C语言当中遇到比较常见的三大排序,在后面还会有别的排序方法,比如插入的递归排序或者涉及到数据结构的排序之类,在后面的复习中我也会通过整理的方式把更多的排序方式分享出来。
第一次的小分享中可能也会出现一些错误之类,如果读者发现希望能够提醒,我也会及时改正,最后希望我能成功并顺利的做记录下去。