摘要:
选择排序的思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。具体一点是:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现在变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。. 阅读全文
摘要:
希尔排序的思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。代码:#include<stdio.h>inta[100];intn;voidShellpass(inta[],intd)//希尔排序的一趟排序,d为当前增量。{inti,j;for(i=d+1;i<=n;i++)if(a[i]<a[i 阅读全文
摘要:
冒泡排序的思想: 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较 阅读全文
摘要:
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。代码:#include<stdio.h>#include<stdlib.h>int*a;intPartition(inta[],intlow,inthigh){inti,j,pivot;i=low;j=high;pivot=a[i];while(i<j){while(i<j&&a[j]>=pivot)j--;if(i< 阅读全文
摘要:
堆排序堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i]&&Key[i]<=key[2i+1]或者Key[i]>=Key[2i]&&key>=key[2i+1]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i]&&key>=key[2i+1]称为大顶堆,满足Key[i]<=key[2i]&&Key[i]<=key[2i+ 阅读全文
摘要:
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。#include<stdio.h>intmain(){intn,i,j,k,a[100];printf("Pleaseinputn:\n");scanf("%d",&n);printf("Pleaseinput%dnumber:\n",n);for(k=1;k<=n;k++)scanf("%d",&a[k]);for(i=2;i<=n;i++){a[0]=a[i];j=i-1;whi 阅读全文