c/c++ 数据结构和算法-选择排序/冒泡排序

冒泡排序

#include <stdio.h>
void BubbleSort(int *a,int n);
 
int main(void)
{
    int k;
    int a[10]={2,4,6,8,0,1,3,5,7,9};
    for(k=0;k<10;k++)
    {
      if(k==9)
          printf("%d\n",a[k]);
      else
          printf("%d,",a[k]);
    }
    BubbleSort(a,10);
    for(k=0;k<10;k++)
    {
      if(k==9)
          printf("%d\n",a[k]);
      else
          printf("%d,",a[k]);
    }
    return 0;
}
 
void BubbleSort(int *a,int n)
{
    int i,j,t;
    for(i=0;i<n-1;i++)
      for(j=0;j<n-i-1;j++)
      {
        if(a[j]>a[j+1])
        {
          t=a[j];
          a[j]=a[j+1];
          a[j+1]=t;
        }
      }
}

选择排序

#include <stdio.h>
void SelectSort(int *a,int n);
int main(void)
{
    int k;
    int x[10]={2,4,6,8,0,1,3,5,7,9};
    for(k=0;k<10;k++)
        printf("%d ",x[k]);
      
    printf("\n");
    SelectSort(x,10);
    for(k=0;k<10;k++)
        printf("%d ",x[k]);
    printf("\n");
    return 0;
}
  
void SelectSort(int *a,int n)
{
    int i,j,t;
    int min;
    for(i=0;i<n-1;i++)
    {
       min=i;
       for(j=i+1;j<n;j++)
       {
         if(a[j]<a[min])
             min=j;
       }
       t=a[i];
       a[i]=a[min];
       a[min]=t;
    }
}

时间: 2024-09-20 14:23:19

c/c++ 数据结构和算法-选择排序/冒泡排序的相关文章

数据结构与算法之排序—看不懂你来打我吧

下面主要写了数据结构课本上介绍的「十种排序算法」,趁着快考试了复习一波排序,有图有真相,看不懂打死我吧. 堆排序.快速排序.希尔排序.直接选择排序不是稳定的排序算法,而基数排序.冒泡排序.直接插入排序.折半插入排序.链表插入排序.归并排序是稳定的排序算法. 直接插入排序 T(n) = O(n^2) 直接插入排序「Insertion Sort」的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 设数组为a[0-n-1]: 初始时

算法 选择排序-请教一个选择排序的算法问题

问题描述 请教一个选择排序的算法问题 你好, 我刚刚开始接触JAVA, 问一个选择排序的问题. private static void SelectionSort (int[] arr) { for(int i=0; i for(int j=i+1;j if (arr[i] > arr[j]) { int m; m = arr[i]; arr[i] = arr[j]; arr[j] = m; } } } } 这个方法正确,但是交换次数多了,所以我想改进一下. private static voi

算法 选择排序-C语言关于选择排序法的问题

问题描述 C语言关于选择排序法的问题 #include"stdio.h" #define?N?10 int?main()? { int?i,j,min,tem,a[N];? for(i=0;i ????scanf("%d",&a[i]); for(i=0;i { ????min=i;? ????for(j=i+1;j ?????????if(a[min]>a[j])? ?????????min=j;? ????tem=a[i];? ????a[i]=a

算法-选择排序这两种有什么不同,注意粗体部分

问题描述 选择排序这两种有什么不同,注意粗体部分 public static void sort(Comparable[] a){ // 将a[] 按升序排列 int N = a. length; // 数组长度 for (i nt i = 0; i < N; i ++) { // 将a[i ] 和a[i +1. . N] 中最小的元素交换 int min = i ; // 最小元素的索引 for (int j = i +1; j < N; j ++) if (l ess(a[j ] a[mi

Java数据结构及算法实例:冒泡排序 Bubble Sort_java

/** * 冒泡排序估计是每本算法书籍都会提到的排序方法. * 它的基本思路是对长度为N的序列,用N趟来将其排成有序序列. * 第1趟将最大的元素排在序列尾部,第2趟将第2大的元素排在倒数第二的位置, * 即每次把未排好的最大元素冒泡到序列最后端. * 该排序方法实际上分为两重循环,外层循环:待排元素从数组的第1个元素开始. * 内层循环:待排元素从数组的第1个元素开始,直到数组尾端未排过的元素. * 在内循环中,如果遇到前面元素比其后的元素大就交换这两个元素的位置. * 由此可见冒泡排序的复杂

堆排序算法(选择排序改进)_C 语言

首先要理解堆的含义:要么所有节点都不大于其子孩子节点数据,要么都不小于其子孩子节点数据 堆排序的核心思想:就是要满足所有节点都满足上面两点,如何完成,看下面 堆排序的步骤: 1.首先要建成一个大顶堆或者小顶堆,在建的过程中其实就是调整节点的位置,首先要从最后最后一个节点的母亲节点开始,按照堆的含义调整.为什么不是最后一个或者其他?因为要保证完整性和不必要性,所以只需从最后一个的母亲节点开始即可(下面的堆默认存在顺序结构,从索引0开始的,所以有些二叉树的特性请查阅二叉树),直至索引节点为0的节点.

Java实现选择排序算法的实例教程_java

选择排序概念 选择排序也是一种交换排序算法,和冒泡排序有一定的相似度,因此个人认为选择排序可以视为冒泡排序的一种改进算法.它的思路是这样的: 设现在要给数组arr[]排序,它有n个元素. 1对第一个元素(Java中,下标为0)和第二个元素进行比较,如果前者大于后者,那么它一定不是最小的,但是我们并不像冒泡排序一样急着交换.我们可以设置一个临时变量a,存储这个目前最小的元素的下标.然后我们把这个目前最小的元素继续和第三个元素做比较,如果它仍不是最小的,那么,我们再修改a的值.如此直到和最后一个元素

Swift实现Selection Sort选择排序算法的实例讲解_Swift

选择排序Selection Sort是一种和插入排序Insertion Sort类似的排序方法,它同样只适用于对规模不大的集合进行排序.它的核心思想是,在序列内部,把序列逻辑上分成已排序和未排序两部分,不断找到未排序部分中最符合排序规则的元素,添加进已排序部分,直到序列中所有元素都已经添加到了已排序部分,此时,整个序列就排序完成了. 冒泡排序是两两比较不断交换来实现排序,所以比较繁琐. 而选择排序  则是先选择要交换的那个数,才去交换.这样就可以省去很多不必要的步骤. Swift版实现示例: f

Java经典算法汇总之选择排序(SelectionSort)_java

a)原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,-n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.(这里只介绍常用的简单选择排序) b)简单选择排序的基本思想:给定数组:int[]arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换:第2趟,在待排序数据arr[2]~ar