交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。
来源:互联网 发布:歌斐资产 知乎 编辑:程序博客网 时间:2024/05/20 02:54
冒泡排序:冒泡排序应该是最容易实现的一种排序算法了。原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大(升序)的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。
存在不足:就是本来位于前面的较小数被交换到后面。
在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去
空间复杂度为O(1)
冒泡排序最坏情况的时间复杂度是O(n²)
void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}//升序void BubbleSort(int *p, int length){ for (int i = 0; i < length; i++) { for (int j = 0; j < length - i - 1; j++) { if (p[j] > p[j + 1]) { swap(p[j], p[j + 1]); } } }}
快速排序:平均空间复杂度是O(log2n),最坏情况的空间复杂度是O(n)
平均时间复杂度是O(nlogn),最坏情况的时间复杂度是O(n²)
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
#include<iostream> using namespace std; void quickSort(int s[], int l, int r) { if (l<r) { int i=l,j=r,x=s[l]; while (i<j)//执行完后返回括号里继续判定,判定为真继续执行语句直到括号里判定为假为止 { while (i<j&&s[j]>=x)//从右往左找第一个小于x的数 j--; if (i<j) { s[i++]=s[j]; } while (i<j&&s[i]<x)//从左往右找第一个大于x的数 i++; if (i<j) { s[j--]=s[i]; } } s[i]=x; quickSort(s, l, i-1); quickSort(s, i+1, r); }} int main() { int array[]={34,65,12,43,67,5,78,10,3,70},k; int len=sizeof(array)/sizeof(int); cout<<"The orginal arrayare:"<<endl; for(k=0;k<len;k++) cout<<array[k]<<","; cout<<endl; quickSort(array,0,len-1); cout<<"The sorted arrayare:"<<endl; for(k=0;k<len;k++) cout<<array[k]<<","; cout<<endl; system("pause"); return 0; }
阅读全文
0 0
- 交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。
- 在排序的数组中交换两个元素
- 有两个序列a,b,要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 交换数组中两个位置的元素值
- 交换两个兄弟元素的位置
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 给定两个已排序序列,找出共同的元素
- 给定两个已排序序列,找出共同的元素
- 有两个序列a,b,大小都有n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最大。
- 有两个序列a,b,大小都为 n,序列元素的值任意整数,无序 通过交换a,b中的元素,使序列 a的和与序列b的和之间的差最小
- 第十五周项目二(1)-洗牌(随机交换两个位置的元素来洗牌)
- 合并两个排序序列
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和
- 两个有序序列的共同元素
- 78. Subsets
- dom4j的详解
- HDFS-HA-federation的机制和功能组件
- Java常见面试题—GC垃圾收集器
- 程序员面试金典(4):空格替换(python)
- 交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。
- springmvc
- 数据结构之LinkList
- 常用的mq
- ZOJ2185 简单分块 找规律
- 自我反思(1)
- JAVA POI 读取2007 EXCEL时 XSSFWorkbook(fis);出错
- JAVA中的线程安全与非线程安全
- poj 3295