c++:选择排序和冒泡排序

来源:互联网 发布:淘宝手机页面怎么装修 编辑:程序博客网 时间:2024/05/18 00:55
//============================================================================// Name        : suanfa.cpp// Author      : // Version     :// Copyright   : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>#define N 5using namespace std;void SelectSort(int r[],int n)//数组下标从1开始{int index=0;for(int i=1;i<=n-1;i++)//对N个记录进行n-1次的简单选择排序{index=i;for(int j=i+1;j<=n;j++){if(r[index]>r[j]){index=j;//找到最小的位置}}if(index!=i){r[i]=r[index]^r[i];r[index]=r[i]^r[index];r[i]=r[i]^r[index];}}}void BubbleSort(int r[],int n){//气泡排序开始的时候扫描整个序列,在扫描过程中两两比较相邻记录,如果反序则交换,最终//最大记录就被放到序列的最后一个位置,直到n-1次排序之后for(int i=0;i<n-1;i++){for(int j=i+1;j<n;j++){if(r[i]>r[j]){r[i]=r[i]^r[j];r[j]=r[i]^r[j];r[i]=r[i]^r[j];}}}}void BubbleSort1(int r[],int n){//气泡排序开始的时候扫描整个序列,在扫描过程中两两比较相邻记录,如果反序则交换,最终//最大记录就被放到序列的最后一个位置,直到n-1次排序之后int exchange = n;//第一趟气泡排序的范围是r[1]到r[n]while(exchange)//仅当上一趟排序有记录交换才进行本趟排序{int bound=exchange;//每次循环开始都要先设置exchange为0,为了避免的就是减少循环的次数exchange=0;for(int j=1;j<bound;j++){if(r[j]>r[j+1]){r[j]=r[j+1]^r[j];r[j+1]=r[j]^r[j+1];r[j]=r[j]^r[j+1];exchange=j;}}}}void display(int r[],int n){for(int i=0;i<n;i++){cout<<r[i]<<endl;}}int main(){int r[5]={5,4,3,2,1};int n=N;SelectSort( r, n);display(r,n);BubbleSort(r, n);display(r,n);BubbleSort1(r, n);display(r,n);return 0;}

原创粉丝点击