首页 > 编程语言 >排序函数的算法(day12)

排序函数的算法(day12)

时间:2022-11-12 21:31:40浏览次数:50  
标签:arr int S2 S4 S3 算法 day12 排序

今天尝试了三种数字的排序法。目的为

1)熟悉数组的操作

2)熟悉循环

笔者是做嵌入式的,不想再算法上做过多探究,自身水平和专业也不允许深入太多。现在直接给出三种排序函数。

1.插值排序

void insort(int s[], int n)
{
int i, j;
for (i = 2; i <=n ; i++)
{
s[0] = s[i];
j = i - 1;
while (s[0] < s[j])
{
s[j + 1] = s[j];
j--;
}
s[j + 1] = s[0];
}
}

int main()
{
int arr[11], i;
printf("请输入10个数字\n");
for (i = 1; i <= 10; i++)
{
scanf("%d", &arr[i]);
}
for (i = 1; i <= 10; i++)
{
printf("%5d", arr[i]);
}
insort(arr, i - 1);
printf("\n排序结果:\n");
for (i = 1; i < 11; i++)
{
printf("%5d", arr[i]);
}
return 0;
}

其实现逻辑如下:

1)取数组的S0为警戒哨,S0为空

2)从数组的第二个元素开始排序(第一个元素无法比较),将两两比较的后一位作为警戒哨的值

S2[(S1,S2),S3 , S4.........)]

3)将S1,S2排序(警戒哨保留为S2的值)

4)进入下一组排序

S3[S1,(S2 , S3) , S4.........)]

将S2,S3排序,通过while循环,用保留的S3的值,将S3插入S1,S2,S3存储区域中合适的位置。

5)进入下一组排序

S4[S1,S2 , (S3 , S4).........)]

将S3,S4排序,通过while循环,用保留的S4的值,将S4插入S1,S2,S3,S4存储区域中合适的位置。

。。。。。。。

2.冒泡排序

void bubble_sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}

}

int main()
{
int arr[] = { 2,8,9,4,5,3,1,7 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (i = 0; i <= sz; i++)
{
printf("%d", arr[i]);
}
return 0;
}

其实现逻辑如下:

实例

7

4

3

11

15

16

8

1


(1)

(7

4)

3

11

15

16

8

1










(2)

(4

7)

3

11

15

16

8

1










(3)

4

(3

7)

11

15

16

8

1


(4

3)

7

11

15

16

8

1


(3

4)

7

11

15

16

8

1










(4)

3

4

(7

11)

15

16

8

1


3

(4

7)

11

15

16

8

1










(5)

3

4

7

(11

15)

16

8

1


3

4

(7

11)

15

16

8

1










(6)

3

4

7

11

(15

16)

8

1


3

4

7

(11

15)

16

8

1










(7)

3

4

7

11

15

(8

16)

1


3

4

7

11

(8

15)

16

1


3

4

7

(8

11)

15

16

1


3

4

(7

8)

11

15

16

1










(8)

3

4

7

8

11

15

(1

16)


















(1

3)

4

7

8

11

15

16

3.快速排序(两者结合的改良)

void qusort(int s[], int start, int end)
{
int i, j;
i = start;
j = end;
s[0] = s[start];
while (i < j)
{
while (i < j && s[0] < s[j])
j--;
if (i < j)
{
s[i] = s[j];
i++;
}
while (i < j && s[i] <= s[0])
i++;
if (i < j)
{
s[j] = s[i];
j--;
}
}
s[i] = s[0];
if (start < i)
qusort(s, start, j - 1);
if (i < end)
qusort(s, j + 1, end);
}


int main()
{
int arr[11], i;
printf("请输入10个数:\n");
for (i = 1; i <= 10; i++)
{
scanf("%d", &arr[i]);
}
qusort(arr, 1, 10);
printf("排序后的顺序:\n");
for (i = 1; i <= 10; i++)
{
printf("%5d", arr[i]);
}
}

实例

7

4

3

11

15

16

8

1

基准7

7

4

3

11

15

16

8

1


4

3

1

7

11

15

16

8

基准4

4

3

1

7

11

15

16

8


3

1

4

7

11

15

16

8

基准3

3

1

4

7

11

15

16

8

1

3

4

7

11

15

16

8

基准1

1

3

4

7

11

15

16

8

基准11

1

3

4

7

11

15

16

8


1

3

4

7

8

11

15

16

基准15

1

3

4

7

8

11

15

16

基准16

1

3

4

7

8

11

15

16

使用了递归,代码效率提升,但是代码复杂。



标签:arr,int,S2,S4,S3,算法,day12,排序
From: https://blog.51cto.com/u_15862591/5846815

相关文章

  • 单链表的算法
    单链表的算法先进先出单链表(尾插法)首先我们要知道什么是先进先出:每次插入的新元素,都是插在表尾。就比如饭堂打饭排队的时候,第一个打饭的人往往是第一个离开的,以此类推,最......
  • 实现泛型算法的几个方法
    #include<iostream>#include<stdio.h>#include<vector>#include<string>//Findaelementincontainerfunction////Youcanusethefunctiontofindaelementinaco......
  • 实验三:朴素贝叶斯算法实验
    【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;熟悉s......
  • 实验三:朴素贝叶斯算法实验
    【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;熟悉s......
  • java实现Apriori算法——频繁项集的计算
    前言《数据挖掘》:用Apriori算法求特定支持度的频繁项集。算法本身不难,java萌新我却花费了一天的时间,特此记录。算法描述我们目的是求出项数为K的频繁项集即L(K)。Apriori算......
  • 窗口滑动算法
    窗口滑动算法简介滑动窗口算法思想是非常重要的一种思想,可以用来解决数组,字符串的子元素问题。它可以将嵌套循环的问题,转换为单层循环问题,降低时间复杂度,提高效率。滑动......
  • C温故补缺(九):字节对齐与排序
    字节对齐与排序字节对齐的原因与字节排序取自:VisualEther原文档下载:Gitee_packed_packet用于结构体中变量在内存中的对齐.如typedefstructtest_s{inti;......
  • 实验三:朴素贝叶斯算法实验
    |20大数据三班| 20大数据三班 ||----|----|----||作业要求|作业要求||学号|20161337|实验三:朴素贝叶斯算法实验【实验目的】理解朴素贝叶斯算法原理,掌握......
  • 机器学习算法:UAMP 深入理解
    导读降维是机器学习从业者可视化和理解大型高维数据集的常用方法。最广泛使用的可视化技术之一是t-SNE,但它的性能受到数据集规模的影响,并且正确使用它可能需要一定学习成......
  • 代码随想录训练营第三十一天 | 贪心算法
    贪心算法的核心思想是在每一步决策中都找到局部最优解122.买卖股票的最佳时机classSolution{publicintmaxProfit(int[]prices){intn=prices.le......