算法_冒泡程序

这里的第一个算法,没什么可以说的,一定是从最经典的冒泡算法开始,会列出python版和c版

冒泡算法很简单,就是像冒泡一样,把小的,也可以理解成轻的,从下面浮出来

比如有个list = [3,2,5,4,1],先用3和2比,2轻,2浮上去,3沉下去,3再和5比,3比较轻,位置不变,5和4比,4浮上来,5和1比,1浮上来

第一次比完,得到[2,3,4,1,5],再进行第二次,第三次,直到把没有可以浮的了,就结束,通常这个算法的版本是嵌套循环,就是for for,好像掉进这个圈出不来了,其实不用全部比一遍,如果list初始就是[2,1,3,4,5],其实只要第一次就可以得到结果了,后面不是无用功么

好了,闲话不多,上代码,边嗑瓜子,边喝茶,边看代码,人生一大幸事啊

伪代码

序列 = [3,2,5,4,1]
循环序列
  标记初始化,直到标记没有变化,就结束循环
  如果第一个>第二个
    第二个和第一个换位置
    标记值变化,记录有变化了
  回到头,重新循环
  

python版

#!/usr/bin/python
# coding: UTF-8

def bubble_sort(num_list):
  num_len = len(num_list)
  while True:
    n = 0
    ‘‘‘range这里-1是因为下面的+1,如果不-1,下面+1后会报out of range错误,而且从算法来说最多查找len(list) - 1次,因此这个是没问题的‘‘‘
    for i in range(num_len-1):
      if num_list[i] > num_list[i+1]:
        num_list[i],num_list[i+1] = num_list[i+1],num_list[i] #交换位置
        n += 1
    if n == 0:
      break
  return num_list

if __name__ == ‘__main__‘:
  num_list = [3,2,5,4,1]
  print num_list
  num_list = bubble_sort(num_list)
  print num_list

c版

#include <stdio.h>

int main()
{
  int num[] = {3,2,5,4,1};
  int i,num_len1;
  num_len1 = sizeof(num)/4; //这个sizeof的结果是20,我也不知道咋算的,不是说一个数字占1bit$
  bubble_sort(num,num_len1);
  for(i=0; i<num_len1; i++)
  {
    printf("%d \n", num[i]);
  }
  return 0;
}

int bubble_sort(int num_list[],int num_len)
{
  int i;
  while(1)
  {
    int n = 0;
    for(i=0;i<(num_len-1);i++)
    {
      if(num_list[i] > num_list[i+1])
      {
        int temp = num_list[i];
        num_list[i] = num_list[i+1];
        num_list[i+1] = temp;
        n++;
      }
    }
    if(n == 0)
    {
      break;
    }
  }
  return 0;
}

不得不说,c真的很难适应,不过总会适应的,一起加油把

原文地址:https://www.cnblogs.com/xiu123/p/8407832.html

时间: 2024-10-10 06:26:52

算法_冒泡程序的相关文章

复习常用算法_冒泡算法

package com.itemuch.cloud.test; import java.io.Serializable;import java.util.Date;import java.util.HashMap;import java.util.Map; public class javaBasical{ public static void main(String arsg[]){ int[] unSortNums = new int[]{ 1,3,4,5,2,9}; getSortResu

[转]各种排序算法及其java程序实现

原文:http://blog.csdn.net/t12x3456/article/details/7430700 各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想: 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止.2. 排序过程: 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

常见排序算法(冒泡、选择、插入、快速、归并C++实现)

常见排序算法(冒泡.选择.插入.快速.归并C++实现) #include <iostream> using namespace std; // 冒泡排序 void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j < size - 1 - i; ++j) if (data[j+1] <

排序算法之冒泡法

package chap02_Basic_Algorithms; import static org.junit.Assert.*; import java.util.Arrays; import org.junit.Test; public class SortAlgorithms { /** * 冒泡法排序 * * @param n */ static void bubbleSort(int[] n) { int j = n.length - 1; int i; int tmp; while

HDU 1162 Eddy&#39;s picture (prime算法_裸题)

Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every day Eddy draws pictures in his small room, and he usually puts out his newest pictures to let his friends appreciate. but the result i

FCM算法的matlab程序(初步)

FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.

GMM算法的matlab程序(初步)

GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.