
算法
lixiang0522
好好学习,天天向上。
展开
-
直接插入排序
基本思路: 1. 从a[0]开始,也就是从1个元素开始是有序的,a[1]~a[n-1]是无序的。 2. 从a[1]开始并入前面有序的数组,直到n-1。 #include #define N 5 void insertsort(int a[], int n); void swap(int *x, int *y); void insertsort(int a[], int n){ int原创 2013-03-06 14:37:46 · 720 阅读 · 0 评论 -
直接选择排序
基本思路: 1. 从1开始通过对比找出最小的数的下标。然后把这个下标的值和0交换。 2. 循环把值交换到1 2 3 ... n-1。 #include #define N 5 void selectsort(int a[], int n); void swap(int *x, int *y); void selectsort(int a[], int n){ int i,j; fo原创 2013-03-06 14:25:57 · 850 阅读 · 0 评论 -
冒泡排序
基本思路: 1)从数组开头开始比较两个数,如果前面大于后面的数,那么交换这两个数。一次比较后,最大的数在N-1项。 2)把最后比较的数设置为N-2项,从新开始比较。 3)逐步递减,直到第一项。 #include #define N 9 void bubblesort(int a[], int n); void swap(int *x, int *y); void printarr(in原创 2013-03-07 15:21:45 · 706 阅读 · 0 评论 -
希尔排序
基本思路: 1)将数组按照一个固定的增量分成若干部分,然后按照相隔的增量的元素进行直接插入排序。 2)递减增量的值,继续进行插入排序。 3)直到值为1时,进行最后一次直接插入排序。 #include #define N 9 void shellsort(int a[], int n); void swap(int *x, int *y); void printarr(int a[],原创 2013-03-07 15:21:09 · 800 阅读 · 0 评论 -
归并排序
基本思路: 递归拆分数组,直到只有一个元素,然后进行有序的合并。 #include #define N 9 void mergesort(int a[], int first, int last, int temp[]); void merge(int a[], int first, int mid, int last, int temp[]); void printarr(int a[]原创 2013-03-07 15:22:21 · 741 阅读 · 0 评论 -
堆排序
1)本例使用最小堆,downheap函数把frist位置的值放到合适的位置,让堆还是最小堆。 2)刚开始要从最大的有孩子的位置开始执行downheap函数,把整个数组转换为最小堆。 3)排序的方法是:取第一个元素(最小的)和最后一个元素交换,然后再转换少了一个元素的堆为最小堆,其实就是downheap交换上来的最后一个元素。 4)取到最后就是一个递减的数组了,要递增就使用最大堆。 #inc原创 2013-03-08 16:43:40 · 995 阅读 · 0 评论 -
快速排序
1)先用temp保存第一个位置的值,然后从后面开始找比temp小的值放到第一位。 2)然后从前面开始找比temp大的值,放到前面一步找出那个小的值的位置。 3)循环上面的步骤,直到完成整个数组。 4)把用temp分开的数组分别进行上面的步骤,直到分开的数组只有一个值。 #include #define N 9 void quicksort(int a[], int first, int原创 2013-03-08 16:43:09 · 873 阅读 · 0 评论