/***
作者:一叶扁舟
作用:三种排序算法,冒泡,快速,插入排序
时间: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);
}
}
机试算法题(1)--排序算法
最新推荐文章于 2025-05-14 08:02:48 发布
本文详细介绍了三种常用的排序算法——冒泡排序、快速排序和插入排序的实现原理及具体步骤,并提供了C语言实现代码示例。

474

被折叠的 条评论
为什么被折叠?



