选择排序的思想是:每次从待排序中选择最小(大)的元素插入已经排好的序列中。
/*直接选择排序*/ #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
/*快速排序*/
#include <iostream> using namespace std; void swapp(int &a,int &b) { int temp = a; a = b; b = temp; } int SortSwap(int a[], int left, int right) { int &pos = a[right]; while(left < right) { while(left <right && a[left] <= pos) { ++left; } while(left < right && a[right] >= pos) { --right; } swapp(a[left],a[right]); } swapp(a[left],pos); return left; } void QuickSort(int a[],int left,int right) { if(left >= right) { return; } int pos = SortSwap(a,left,right); QuickSort(a,left,pos - 1); QuickSort(a,pos + 1,right); } int main() { int a[]={1,2,5,4,10,20,12,3,3,5,6,56,43,32}; int size = sizeof(a)/sizeof(int); QuickSort(a,0,size-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