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

/***
作者:一叶扁舟
作用:三种排序算法,冒泡,快速,插入排序
时间:21:39 2017/3/27
***/


#include 


/****
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);
	}
	
	


}

你可能感兴趣的:(机试算法题,数据结构和算法,排序算法,算法,插入排序)