常见排序算法(冒泡,选择,快速)的C语言实现
来源:互联网 发布:DES算法 数论 编辑:程序博客网 时间:2024/06/10 18:21
/*
** 常见排序算法比较
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define N 10
#define Demo 1
void BubbleSort(int arr[],int n);
void SelectSort(int arr[],int n);
void QuickSort(int arr[],int n);
void PrintArray(int arr[],int n);
void GenerateArray(int arr[],int n);
int main(int argc,char *argv[])
{
int arr[N];
GenerateArray(arr, N);
#if Demo
printf("Before the bubble sort------------------------\n");
PrintArray(arr, N);
#endif
printf("Start Bubble sort----------------------\n");
clock_t start_time1=clock(); //开始计时
BubbleSort(arr, N);
clock_t end_time1=clock(); // 结束计时
printf("Running time is: %lf ms\n", (double)(end_time1-start_time1)/CLOCKS_PER_SEC*1000);//输出运行时间
#if Demo
printf("After the bubble sort------------------------\n");
PrintArray(arr, N);
#endif
printf("-----------------------------------------------------------\n");
sleep(1000); // 单位是毫秒即千分之一秒
GenerateArray(arr, N);
#if Demo
printf("Before the selection sort------------------------\n");
PrintArray(arr, N);
#endif
printf("Start selection sort----------------------\n");
clock_t start_time2=clock(); //开始计时
SelectSort(arr, N);
clock_t end_time2=clock(); // 结束计时
printf("Running time is: %lf ms\n", (double)(end_time2-start_time2)/CLOCKS_PER_SEC*1000);//输出运行时间
#if Demo
printf("After the selection sort------------------------\n");
PrintArray(arr, N);
#endif
printf("-----------------------------------------------------------\n");
sleep(1000); // 单位是毫秒即千分之一秒
GenerateArray(arr, N);
#if Demo
printf("Before the quick sort------------------------\n");
PrintArray(arr, N);
#endif
printf("Start quick sort----------------------\n");
clock_t start_time3=clock(); //开始计时
QuickSort(arr, N);
clock_t end_time3=clock(); // 结束计时
printf("Running time is: %lf ms\n", (double)(end_time3-start_time3)/CLOCKS_PER_SEC*1000);//输出运行时间
#if Demo
printf("After the quick sort------------------------\n");
PrintArray(arr, N);
#endif
system("PAUSE");
return 0;
}
// 产生随机列表
void GenerateArray(int arr[],int n)
{
int i;
srand((unsigned)time(0));
for(i = 0; i <N; i++)
{
arr[i] = rand(); // 生成随机数 范围在0-32767之间
}
}
// 打印列表
void PrintArray(int arr[],int n)
{
int i = 0;
for(i = 0; i < n; i++)
printf("%6d", arr[i]);
printf("\n");
}
// 经典冒泡排序
void BubbleSort(int arr[],int n)
{
int i = 0, j =0;
for(i = 0; i < n; i++)
for(j = 0; j < n - 1 - i; j++)
{
if(arr[j] > arr[j + 1])
{
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
}
}
}
// 快速排序的递归实现
void QuickSort(int arr[],int n)
{
if(n <= 1)
return;
int i =0 , j = n - 1;
int key = arr[0];
int index = 0;
while(i < j)
{
// 从后向前搜索
while(j > i && arr[j] > key)
j--;
if(j == i)
break;
else
{
//交换 a[j] a[i]
arr[j] = arr[j] ^arr[i];
arr[i] = arr[j] ^arr[i];
arr[j] = arr[j] ^arr[i];
index = j;
}
// 从前向后搜索
while(i < j && arr[i] <key)
i++;
if(i == j)
break;
else
{
// 交换 a[i] a[j]
arr[j] = arr[j] ^arr[i];
arr[i] = arr[j] ^arr[i];
arr[j] = arr[j] ^arr[i];
index = i;
}
}
QuickSort(arr, index);
QuickSort(arr + index + 1, n - 1 - index);
}
// 选择排序
void SelectSort(int arr[],int n)
{
int i, j;
int min;
for(i = 0; i < n - 1; i++)
{
int index = 0;
min = arr[i];
for(j = i + 1; j < n; j++) //找出 i+1 - n 无序区的最小者与arr[i]交换
{
if(arr[j] < min)
{
min = arr[j];
index = j;
}
}
if(index != 0) //表明无序区有比arr[i]小的元素
{
arr[i] = arr[i]^arr[index];
arr[index] = arr[i]^arr[index];
arr[i] = arr[i]^arr[index];
}
}
}
转载:http://www.cnblogs.com/herbert/archive/2011/01/20/1940392.html
- 基于C语言的常见排序算法(冒泡,选择,快速)的实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现【修正版】
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 常见的排序算法(Java实现):冒泡、插入、选择、快速排序
- C语言分别实现冒泡排序、快速排序、选择排序
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序
- 几种常见排序算法的实现(冒泡法,选择法,插入法,快速排序、堆排序)
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 快速排序,冒泡排序,直接选择排序的算法实现
- C语言实现冒泡、插入、选择、快速排序
- JVM基本原理--dalvik
- HTML5开发 拖拽文件上传
- 盘点:7种从头开始免费学习编程的方法
- 初探dalvik线程机制
- gdb 调试c程序 (2) 设置breakpoint 和 watchpoint
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 高并发高流量的大型网站架构设计(一)
- 服务器上同时安装SQL2000和SQL2005指南
- Why Google better than Baidu 百度的原罪—封杀Google的黑内幕
- C++内存管理
- RS-232, RS-422,和 RS-485序列通訊界面的快速比較
- case when 语句
- hdu 1500
- 用 GRUB 引导自己的操作系统