排序_交换_随机
涉及知识点:
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_SORT typedef 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: //不常见方法1 a = a + b - (b = a); break; case 5: //不常见方法2 b = 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_SORT BubbleSort(arr,10); #else SelectSort(arr,10); #endif Print(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; }
转载请注明
作者:JarvisChu
地址:http://www.cnblogs.com/JarvisChu