三大排序

来源:互联网 发布:淘宝刀具规则 编辑:程序博客网 时间:2024/05/17 22:05

一、冒泡排序


冒泡排序算是排序算法里面的一种较为简单的算法,也是我接触的第一种排序算法,有升序与降序之分,如果面试的时候面试官问道这个题目,一定要问清楚是升序还是降序,这样会给你加分。

下面,我以升序来讲一下它的运作。

  1. 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 3、针对所有的元素重复以上的步骤,除了最后一个。
  4. 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

void maopao(int*num,int m){for (int i = 0; i < m-1; i++){cout << "i="<<i << endl;for (int j = 0; j<m -i- 1; j++){if (num[j]>num[j + 1]){int temp;temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}for (int k = 0; k < m; k++){cout << num[k] << "  ";}cout << endl;}} }

二、插入排序

在递增排序中,感觉和冒泡排序法相反,循环时插入排序的左边永远是最小的(左边开始排序);而冒泡排序循环时最大值被派到最右边(右边开始排序)。
1.选择插入点元素
2.插入点元素与其前面每一个元素比较,把最大值往前挪
3.把插入点放到合适位置
4.插入点元素更新,重新循环123步骤

void InsertionSort(int *num, int n){int temp ,i,p;for (int i = 1; i<n; i++){temp = num[i];//从待插入组取出第一个元素。 p = i - 1; //i-1为插入元素的前一个元素的下标while (p>=0 && temp<num[p])  //循环比较排序,注意判断条件为两个,p>=0对其进行边界限制。第二个为插入判断条件 {num[p + 1] = num[p];//若不是合适位置,有序组元素向后移动 p--;}num[p + 1] = temp;//找到合适位置,将元素插入。 }}

三、选择排序


1.从开头遍历,找到最小值并把其下标赋值给min
2.从第二个数开始遍历,找到最小值
每次找到最小值并排序

void SelectionSort(int *num, int n){int min = 0;int j = 0;int tmp ;for (int i = 0; i < n - 1; i++){min = i;//每次讲min置成无序组起始位置元素下标 for (j = i; j < n; j++)//遍历无序组,找到最小元素。 {if (num[min]>num[j]){min = j;}}if (min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置 {tmp = num[min];num[min] = num[i];num[i] = tmp;}}



代码综合:http://download.csdn.net/download/qq_29540745/9966565