冒泡排序,选择排序,插入排序的c和python实现

冒泡排序:python

  冒泡排序是经典排序算法之一,时间复杂度为O(n2),基本原理以下列程序注释:算法

python实现:数组

# 冒泡排序
# 一次比较两个元素,重复走访
# 数列中最大的数会在屡次比较后直接挪到最后,下次比较时不参与
# 由于越小的元素会慢慢'浮'到数列顶端,因此叫作冒泡排序

# 例程

def bubblesort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j]

 

c实现:网站

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

对比两程序可知,其都是经过两级for循环实现冒泡排序功能。在python中,简化了变量的声明,而且经过a,b=b,a直接互换了数组成员。spa

 


 

插入排序:code

  (通常按照最坏时间复杂度讨论)  时间复杂度为O(n2)。经过c例程,看看它的实现方法。blog

  首先将 arr[1] 存放在temp中,接着进入下一个for循环中,这时,若是 arr[j-1],即 arr[0] 大于temp, arr[0] 中的元素就被放在 arr[1] 中,而以前的 arr[1] 中的元素就被放入了 arr[0] 中。简单归纳:arr[1]与前面的数组元素进行了比较,大的被放在了后面。小的放在了前面。排序

  然后,第二个for循环到来,这时,i=2,这时咱们不难看出,在 for (j = i; j > 0 && arr[j - 1] > temp; j--) 这个循环中,arr[2] (temp)依次与前面的元素进行比较,若是前面的元素大于 temp , 前面的元素就会向后移动一次,若是前面的元素小于 temp,temp就排在这个元素的后方,这就是“插入”排序的核心意思。(查找图片资料更容易理解,这里略去)教程

c实现图片

//插入排序:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

void insertion_sort(int arr[], int len)
{
    int i, j, temp;
    for (i = 1; i < len; i++)
    {
        temp = arr[i];
        for (j = i; j > 0 && arr[j - 1] > temp; j--)
            arr[j] = arr[j - 1];
        arr[j] = temp;
    }
}

 

python实现

# 插入排序
def insertionSort(arr):

    for i in range(1, len(arr)):
        key = arr[i]
        j = i-1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key

 


 

 

选择排序:

  时间复杂度O(n2)。算法实现:首先在全部数组元素中找到最小值,并放在最前方,而后再去掉已排序的最小值数组元素,接着找剩余元素的最小值(即“选择最小值”),放在前方,直到全部元素排序完成。

c实现:

//选择排序

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void selection_sort(int arr[], int len)
{
    int i, j;
    for (i = 0; i < len - 1; i++)
    {
        int min = i;
        for (j = i + 1; j < len; j++)  //走访未排序程序
        {
            if (arr[min] > arr[j])
                min = j;  //记录未排序的数的最小值位置
        }
            swap(&arr[i], &arr[min]);  //最小值与arr[i]作交换
    }
}

 

python实现:

# 选择排序
# 指定一个元素
# 依次比较,将最小的元素放在第一个
# 而后继续比较剩下的元素,直至完成排序

# 例程


def seletesort(A):
    for i in range(len(A)):
        min_id = i
        for j in range(i+1, len(A)):
            if A[min_id] > A[j]:
                min_id = j
        #  将i号位与min_id号位的值调换(实际上a,b=b,a是调换了二者的地址)
        A[i], A[min_id] = A[min_id], A[i]

 

(部分程序思路参考菜鸟教程官方网站完成)

相关文章
相关标签/搜索