(一)选择法排序
原理:每一趟从待排序的数据元素中选择最小(大)的一个元素,顺序放在已排好序的数列最后,直到全部待排序的数据元素排完。
步骤:(1)从无序列中选择出最小值 (2)将选择出的最小值与无序列的第一个元素交换
#include<iostream> using namespace std; void select(int *a,int n) { for(int i = 0;i<n-1;i++) //从无序数组的第i=0个开始找起 { for(int j = i+1;j<n;j++) //与第i+1个(也就是后一个)做比较,如果比后一个大,则把小的交换到i的位置 { if(a[i]>a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } } for (int i = 0;i<n;i++) { cout << a[i] << " " << endl; } } int main() { int a[5] = {2,5,4,1,3}; select(a,5); return 0; }
(二)冒泡法排序
原理:(1)比较相邻元素。若第一个比第二个大,则交换 (2)对每一对相邻元素做同样操作,直到最后一对,这时最后一个元素应该是最大的 (3)重复操作,除了最后一个 (4)持续对越来越少的元素做同样操作,直到没有需要比较的数字
#include<iostream> using namespace std; void select(int *a,int n) { for(int i = 0;i<n-1;i++) //外层循环控制比较的次数,每一次内层循环比较完毕则最后一个数为最大数,所以i+1可以保证内层循环避免比较最后一个数 { for(int j =0 ;j<n-i-1;j++) //内层循环每次都从头比较 { if(a[j]>a[j+1]) { int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } for(int i =0;i<n;i++) cout << a[i] << " " << endl; } int main() { int a[5] = {5,4,2,1,3}; select(a,5); return 0 ; }