排序算法复习之——内部排序算法之——交换排序
来源:互联网 发布:java jlabel dialog 编辑:程序博客网 时间:2024/05/24 00:09
排序算法复习之——内部排序算法之——交换排序
交换排序分为:冒泡排序(稳定)、快速排序(不稳定)
交换排序的基本思想:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
1、 冒泡排序:
时间复杂度O(n*n)空间复杂度:O(1)
冒泡排序算法:依次比较相邻的两个数,将小数放在前面,大数放在后面。
在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
实现很简单:就是简单的2个for循环。
实现如下:
#include "stdafx.h"#include <iostream>using namespace std;void bubble(int a[], int size){ for (int i=1;i<size; i++) { for (int j=0;j<size-i;j++) { if (a[j]>a[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } }int _tmain(int argc, _TCHAR* argv[]){ int a[]={49,38,65,97,76,13,27,49}; int size=sizeof(a)/sizeof(int); bubble(a,size); for (int k=0; k<size; k++) { cout<<a[k]<<" "; } cout<<endl; system("pause"); return 0;}
运行结果:
2、快速排序算法:快速排序是冒泡排序的一种改进
时间复杂度O(nlogn)空间复杂度:O(logn)
基本思想:通过一趟排序将待排记录分割成独立的2部分,其中一部分记录的关键字均比另一部分记录的关键字小,则分别对这两部分记录进行排序,以达到整个序列有序。
一趟快速排序的做法:附设2个指针low和high,设枢轴记录关键字为key,则先从高位起(high)向前搜素找到第一个关键字小于key的记录和枢轴记录交换,然后从低位(low)所指的位置向后搜索,找到第一个关键字大于key的记录和枢轴记录交换,重复这两部,直至low=high为止。
实现如下:
#include "iostream"using namespace std;void quicksort(int a[], int low, int high){ int i,j,key,temp; if(low < high) { key = a[low]; i = low; j = high; while(i < j) { for( i = i + 1; i < high; i++) if( a[i] > key) break; for( j = j; j > low; j--) if( a[j] < key) break; if(i < j) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } temp = a[low]; a[low] = a[j]; a[j] = temp; quicksort(a,low,j-1); quicksort(a,i,high); }} int _tmain(int argc, _TCHAR* argv[]){ int a[]={49,38,65,97,76,13,27,49}; int size = sizeof(a)/sizeof(int); quicksort(a,0,size-1); for (int i=0;i<size;i++) { cout<<a[i]<<" "; } system("pause"); return 0;}
运行结果:
- 排序算法复习之——内部排序算法之——交换排序
- 排序算法复习之——内部排序算法之——插入排序
- 排序算法复习之——内部排序算法之——选择排序
- 排序算法复习之——内部排序算法之——归并排序
- 排序算法之交换排序——冒泡排序
- Snail—算法学习之内部排序
- 排序算法复习——交换类排序
- 排序算法复习——交换类排序
- 算法之交换排序——冒泡排序
- 算法之交换排序——快速排序
- 算法之排序——交换排序(选择排序,冒泡排序)
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- .net础学习one
- 最全介绍Document对象内容集合
- 异常的捕获及处理
- Interrupt Handler
- 粗读《编程高手箴言》
- 排序算法复习之——内部排序算法之——交换排序
- 解析常用加密算法
- Android学习笔记之网络接口(Http接口,Apache接口,Android接口)
- 基于IIS/ASP.NET开发的大型网站汇总(备查)
- Ubuntu下安装Qt环境及Qt Creator开发工具
- USACO 2012 February Contest, Bronze Division
- 素数筛选——爱拉托逊斯筛选法
- html5的小游戏和Java版的dota转换器
- oracle04