比较冒泡排序和选择排序

来源:互联网 发布:全国软件开发考试报名 编辑:程序博客网 时间:2024/05/22 01:43

冒泡排序:

#include <iostream>using namespace std;int main(){int a[1000];int n = 0;cout << "输入任意字母开始排序" << endl;while (cin >> a[n]){n++;}int i, j;int temp;for(i = 0; i < n - 1; i++){for(j = 0; j < n - 1 - i; j++){if(a[j] > a[j + 1]){temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}for(i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;system("pause");return 0;}
这个冒泡排序是从小到大排的, 如果每次前一个数都比后一个数大, 那么就得把这两个数交换一次,每次交换都得浪费时间和内存,这样效率不是很高。


选择排序:

#include <iostream>using namespace std;int main(){int a[1000];int n = 0;cout << "输入任意字母开始排序" << endl;while (cin >> a[n]){n++;}int i, j, p;//p用来记录每轮循环中最小数的下标int temp;for(i = 0; i < n - 1; i++){p = i;for(j = i + 1; j < n; j++){if(a[p] > a[j])//如果有比a[p]更小的数就把其下标赋给p;p = j;}if(i != p)//如果p和最开始的i不一样就交换这两个值,否则不交换;{temp = a[p];a[p] = a[i];a[i] =  temp;}}for(i = 0; i < n ;i++)cout << a[i] << " ";cout << endl;system("pause");return 0;}
这个排序也是从小到大排序的,注意 p 是用来记录每轮循环中最小数的下标,在内层循环中不进行交换,只是找到最小的数,找到之后就比较这个数的下标是不是和 i 一样,如果不一样就将这两个数交换。


冒泡和选择的区别:

冒泡排序是在内层循环中进行交换的,这样交换的次数是比较多的,如果数据不好那么每轮循环都得交换n - i - 1 次,然后外层还得循环,这样的效率是很低的

选择排序是在外层循环中进行交换的,就算每次都要交换数据,那么一共也只要交换n - 1 次,这样效率就会提高很多。


还有其他的排序算法以后再学习,之后再把这些排序全部总结一下。