选择排序跟冒泡排序的比较
来源:互联网 发布:情到浓时方知爱gl 编辑:程序博客网 时间:2024/05/18 03:14
/*时间复杂度
选择排序:比较次数O(n^2)总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。
冒泡排序:若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数为n-1,交换次数为0,所以,冒泡排序最好的时间复杂度为O(n); 若初始文件是反序的,需要进行趟排序。每趟排序要进行次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:C = n*(n-1)/2 M = 3n*(n-1)/2。
*/
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <stdbool.h>//选择排序,找出每一轮最小元素放在本轮开头位置 void SelectSort(int arr[], int length){ int tmp, i, j; for(i = 0; i < length-1; i++) { for(j = i+1; j < length; j++) { if(arr[i] > arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } /* 优化后的选择排序算法 for(i = 0; i < length-1; i++)//length个元素需要比较length-1轮 { int index = i;//假设index为每轮比较后最小的元素下标 ,初始值为每轮第一个元素 for(j = i+1; j < length; j++) { if(arr[j] < arr[index])//index代表一局内最小的那个 index = j; } if(index != i) { tmp = arr[index]; arr[index] = arr[i]; arr[i] = tmp; } } */}//冒泡排序,每次找到轮内最大的放在本轮的最后位置 void BubbleSort(int arr[], int length){ int i, j, tmp; for(i = 0; i < length-1; i++) { for(j = 0; j < length-1-i; j++) { if(arr[j] > arr [j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } /*冒泡排序的优化 bool flag = true; for(i = 0; i < length-1 && flag; i++) { flag = false; for(j = 0; j < length-1-i; j++) { if(arr[j] > arr [j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = true; } } } */} void main(){ int arr[8] = {2,8,5,3,4,7,9,10}; int i; for(i = 0; i < 8; i++) { printf("%d ", arr[i]); } printf("\n"); BubbleSort(arr, 8); for(i = 0; i < 8; i++) { printf("%d ", arr[i]); } printf("\n");}
0 0
- 选择排序跟冒泡排序的比较
- 选择排序与冒泡排序的比较
- 选择排序和冒泡排序的比较
- 冒泡排序、选择排序、插入排序的比较
- 冒泡排序,选择排序,插入排序的比较
- 冒泡排序、插入排序、选择排序的原理及比较
- 冒泡排序、选择排序、快速排序的比较
- 冒泡,选择,插入排序的效率比较
- 比较冒泡排序和选择排序
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- 冒泡排序,选择排序,插入排序,快速排序的比较及优化
- 数组的排序:冒泡排序、选择排序
- 选择,插入,交换,冒泡,希尔排序算法的效率比较
- 选择 插入 快速 冒泡排序算法的比较
- 冒泡法和选择法排序的比较
- 基本排序算法(冒泡、选择、插入)的效率比较
- NSTimeTnterval 用法系统排序,冒泡排序,选择排序比较
- git与github
- linux-文件系统基本概念
- c++程序员经典面试题
- 欢迎使用CSDN-markdown编辑器
- linux下项目发布
- 选择排序跟冒泡排序的比较
- RPC原理详解
- C++ Primer 学习笔记_28_STL实践与分析(2) --顺序容器的操作(上)
- Python中startswith和endswith的一些说明
- ActionBar隐藏方法
- OOA/OOD/OOP
- JSF(PrimeFaces)由后台向前台传递参数
- hdu 1213 How Many Tables
- 数数