机试算法题(1)--排序算法

来源:互联网 发布:nginx body filter 编辑:程序博客网 时间:2024/04/30 10:09
/***作者:一叶扁舟作用:三种排序算法,冒泡,快速,插入排序时间:21:39 2017/3/27***/#include <stdio.h>/****13 2 5 9 1 12采用冒泡排序法:泡是向上冒的*/void bubbleSort(int arrayNum[], int n){int flag;int temp;for (int i = n-1; i > 0; i--){//flag用来标识本趟排序是否发生了交换flag = 0;for (int j = 1; j <= i; ++j){if (arrayNum[j - 1] > arrayNum[j]){temp = arrayNum[j];arrayNum[j] = arrayNum[j - 1];arrayNum[j - 1] = temp;flag = 1;}}//没有经过一次交换说明已经原始数据已经有序了if (flag == 0){return;}}}/**快速排序对于数组arrayNum[],是从left到right进行排序的*/void qickSort(int arrayNum[], int left, int right){int  temp;int i = left; int j = right;if (left < right){temp = arrayNum[left];//下面的循环完成一趟排序,即将数组中的数中小于temp的元素放在左边//大于temp的元素放在右边 while (i != j){//从右向左扫描一个小于temp的元素while (j>i && arrayNum[j] > temp)--j;//放在temp左边的i指针向右移动一位if (i < j){arrayNum[i] = arrayNum[j];++i;}//从做往右扫描,找到一个大于temp的元素while (i < j&&arrayNum[i] < temp)++i;//放在temp的右边的j指针左移动一位if (i < j){arrayNum[j] = arrayNum[i];--j;}}arrayNum[i] = temp;qickSort(arrayNum, left, i - 1);qickSort(arrayNum,i+1,right);}}//插入排序void insertSort(int arrayNum[],int n){int i, j;int  temp;//默认第一个元素即0位置有序,从第二个位置开始处理for (i = 1; i < n; i++){temp = arrayNum[i];j = i - 1;//从待排元素前一位的元素开始扫描,如果大于待排元素就向后移动while (j >=0 && temp < arrayNum[j]){//向后移动arrayNum[j + 1] = arrayNum[j];--j;}//找到插入的位置,插入数据arrayNum[j + 1] = temp;}}//输出结果void printResult(int arrayNum[],int n){for (int i = 0; i < n; i++){printf("%d ", arrayNum[i]);}printf("\n");}void main(){int inputNum;int arrayNum[100] = {13,2,5,9,1,12};  //控制台输入数据while (scanf("%d", &inputNum) != EOF){for (int i = 0; i < inputNum; i++){scanf("%d", &arrayNum[i]);}//insertSort(arrayNum, 6);//qickSort(arrayNum, 0, 5);//采用冒泡排序bubbleSort(arrayNum, inputNum);//输出结果printResult(arrayNum,inputNum);}}

0 0
原创粉丝点击