简述svm算法的基本思想_十大排序算法详解,基本思想+动画演示+C语言实现,太肝了...

下面的99%的代码都是手动敲出来的,参考了诸多资料,已经经过测试,可以放心食用。1.冒泡排序基本思想冒泡排序基本思想是依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。在进行第一轮上面的从左到右的比较时,则会把一个最小或者最大的元素(取决于你想要的排列方式)"冒泡"到最右边的位置,第...
摘要由CSDN通过智能技术生成

下面的99%的代码都是手动敲出来的,参考了诸多资料,已经经过测试,可以放心食用。

1.冒泡排序

基本思想

冒泡排序基本思想是依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

在进行第一轮上面的从左到右的比较时,则会把一个最小或者最大的元素(取决于你想要的排列方式)"冒泡"到最右边的位置,第二轮则是冒泡第二大或第二小的数到最右边,因此我们总共只需要进行n-1轮即可,最后一个数的位置也被固定了(其余n-1个数都比他大且都在其右边)。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

动画:

87225ae87eb0d2a300dec3a5f3e1b364.gif

实现

//void bubbleSort(){   //C实现   int arr[] = {5, 9, 3, 8, 6};   int len = sizeof(arr)/sizeof(arr[0]);     int temp;   for (int i = 0; i < len - 1; i++) //从小到大   {                                 // 外循环为排序趟数,len个数进行len-1趟      for (int j = 0; j < len - 1 - i; j++)      { // 内循环为每趟比较的次数,第i趟比较len-i次,因为第一次已经将最大的元素冒泡到最后一个位置了         if (arr[j] > arr[j + 1])         { //相邻元素比较,逆序则将交换位置            temp = arr[j];            arr[j] = arr[j + 1];            arr[j + 1] = temp;         }      }   }   //打印数组   for (int i = 0; i < len; i++)      printf("%d", arr[i]);}

2.选择排序

基本思想

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

动画:

333e5a0b9ab64de77ec831ac2fe7c099.gif

实现

 //int arr[] = {100, 92, 5, 9, 3, 8, 23, 17, 50, 6};  int len = sizeof(arr)/sizeof(arr[0]);                   int index = 0;                //待会用来存储未排序区最小元素的位置索引  for (int i = 0; i < len; i++) //从小到大  {    index = i;    for (int j = i + 1; j < len; j++) //用i之后的每一个元素去与i元素比较大小,若小于arr[i]则更新最小元素索引    {      if (arr[j] < arr[index])        index = j;    }    //将i与index的元素调换位置    //注意:此处不可将调换位置的函数写进第二层for循环即for(int j=i+1)中,因为交换后i与min指向的对象会交换,此后循环就可能出现仅仅小于arr[i](此时已经换到了min位置)但不小于arr[min](这时在i位置上)的元素也与初始位置上进行交换的情况,具体情况可以试验!    if (i != index) //判断是否需要调换,将最小元素位置换至第一个未排序的位置    {      int temp = arr[i];      arr[i] = arr[index];      arr[index] = temp;    }  }  //打印数组  for (int i = 0; i < len; i++)    printf("%d", arr[i]);}

3.插入排序

基本思想

插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。

一般将第一个元素看做最小的有序组,然后用第二个元素插入到第一个元素组成的有序表中(其实就是个简单的比较大小),然后将第三个元素插入到前两个元素组成的有序表中,形成一个三个元素的有序表,以此类推,最终获得一个包含全部元素的有序表

023b45ca49ac1dad3c55464a5eeb43e8.gif

实现

//void insertionSort()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值