排序_交换_随机

来源:互联网 发布:空间数据库设计 编辑:程序博客网 时间:2024/05/24 06:45

涉及知识点:

1. 冒泡排序

2. 选择排序

3. 不使用第三个变量,交换两个变量

4. 随机数组生成

5. 预定义变量


/************************************************************************* 名  Sort.c* 功  能:顺序表* 描  述:排序算法* 作  者:JarvisChu* 时  间:2012-10-22* 修  订:无。************************************************************************/#include <stdio.h>#include <stdlib.h> #include <time.h>#define BUBBLE_SORT//#define SELECT_SORTtypedef int SWAP_TYPE;//交换两个数,不使用第三个变量void swap(int &a,int &b,SWAP_TYPE type){switch(type){case 1://利用加减法a = a + b;b = a - b;a = a - b;break;case 2://利用一个数异或本身等于0和异或运算符合交换率a = a ^ b;b = a ^ b;a = a ^ b;break;case 3://乘除a = a * b; b = a / b; a = a / b;break;case 4://不常见方法1a = a + b - (b = a);break;case 5://不常见方法2b = a + (a = b)*0;break;default:break;}}//生成随机数组void RandomArray(int arr[], int size){int i;time_t t;srand((unsigned)time(&t));               //随机时间种子  stdlib.h 中for(i=0;i<size;i++){arr[i] = rand()%100;//[0, RAND_MAX(0x7fff)]间的随机整数    }}//打印数组void Print(int arr[], int size){int i;for(i=0;i<size;i++){printf("%-4d",arr[i]);}printf("\n");}//冒泡排序void BubbleSort(int* arr, int size){int i,j;for(i=0;i<size-1;i++)//控制排序趟数,size-1 趟{for(j=0;j<size-i;j++){if(arr[j]>arr[j+1])//从小到大排序{swap(arr[j],arr[j+1],1);//交换两个数}}}}//选择排序void SelectSort(int* arr,int size){int i,j;for(i=0;i<size;i++){for(j=i+1;j<size;j++){if(arr[i]>arr[j]){swap(arr[i],arr[j],2);}}}}int main(){int arr[10];RandomArray(arr,10);//生成随机数组Print(arr,10);//打印原始数组#ifdef BUBBLE_SORTBubbleSort(arr,10);#elseSelectSort(arr,10);#endifPrint(arr,10);printf("-----------------------\n");//测试交换int a = 10,b = 20;swap(a,b,1);printf("%d  %d\n",a,b);swap(a,b,3);printf("%d  %d\n",a,b);swap(a,b,4);printf("%d  %d\n",a,b);swap(a,b,5);printf("%d  %d\n",a,b);printf("-----------------------\n");printf("%s\n %s %s\n",__FILE__,__DATE__,__TIME__);return 1;}


原创粉丝点击