选择排序的思想是:每次从待排序中选择最小(大)的元素插入已经排好的序列中。
/*直接选择排序*/ #include <iostream> using namespace std; void swapp(int &a,int &b) { int temp = a; a = b; b = temp; } int main() { int a[]={5,4,10,20,12,3,2,1,3,5,6,56,43,32}; int size = sizeof(a)/sizeof(int); //计算数组元素个数 for(int i=0;i<size-1;i++) { int last = i; for(int j=i+1;j<size;j++) //选择后面最小元素 { if(a[j] < a[last]) { last = j; } } swapp(a[i],a[last]);//交换 } //输出 for(int i=0;i<size;i++) { cout<<a[i]<<" "; } return 0; }
运行结果:
1 2 3 3 4 5 5 6 10 12 20 32 43 56
冒泡排序思想:比较相邻连个元素大小,选择最大(小)的排序
/*冒泡排序(for循环)*/ #include <iostream> using namespace std; void swapp(int &a,int &b) { int temp = a; a = b; b = temp; } int main() { int a[]={1,2,5,4,10,20,12,3,3,5,6,56,43,32}; int size = sizeof(a)/sizeof(int);//计算数组元素个数 //for循环 for(int i=0;i<size-1;i++) //遍历各个元素 { for(int j=0; j<size-i; j++) //找出了最大(小)的一个 { if(a[j+1] < a[j]) swapp(a[j],a[j+1]); //交换最大(小)的一个 } } //输出 for(int i=0; i<size; i++) { cout<<a[i]<<" "; } return 0; }
运行结果:
1 2 3 3 4 5 5 6 10 12 20 32 43 56
/*冒泡排序(while循环)*/ #include <iostream> using namespace std; void swapp(int &a,int &b) { int temp = a; a = b; b = temp; } int main() { int a[]={1,2,5,4,10,20,12,3,3,5,6,56,43,32}; int size = sizeof(a)/sizeof(int);//计算数组元素个数 //while循环 int loop = size-1;//最大循环次数 while(loop>0) // { int lastExchangeIndex = 0; //标记本次交换最后一对元素的最小小标 for(int i=0; i<loop; i++) { if(a[i+1] < a[i]) { swapp(a[i],a[i+1]); lastExchangeIndex = i; } } loop = lastExchangeIndex; //标记本次交换最后一对元素的最小小标 } //输出 for(int i=0; i<size; i++) { cout<<a[i]<<" "; } return 0; }
运行结果:
1 2 3 3 4 5 5 6 10 12 20 32 43 56