排序的基本概念
冒泡排序
示例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<sys/timeb.h>
#define MAX 10000
long getSystemTime()
{
struct timeb tb;
ftime(&tb);//取系统的时间,精确到毫秒,其返回一个结构体
return tb.time * 1000 + tb.millitm;//将秒转换成毫秒,转换单位为1000,millitm表示毫秒
}
//交换函数
//void Swap(int* a, int* b)
//{
// int temp = *a;
// *a = *b;
// *b = temp;
//}
//冒泡排序
void BubbleSort(int arr[], int length)
{
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
/*Swap(&arr[j], &arr[j + 1]);*/
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
改进的冒泡排序
//int flag = 0;//表示没有排序好
//void BubbleSort(int arr[], int length)
//{
// for (int i = 0; i < length - 1; i++)
// {
// flag = 1;//认为已经排序好
// for (int j = 0; j < length - i - 1; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// flag = 0;
// /*Swap(&arr[j], &arr[j + 1]);*/
// int temp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = temp;
// }
// }
// }
//}
//打印函数
void PrintArray(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[MAX];
srand((unsigned int)time(NULL));//随机种子
for (int i = 0; i < MAX; i++)
{
arr[i] = rand() % MAX;
}
printf("排序前:\n");
//PrintArray(arr, MAX);
long t_start = getSystemTime();
BubbleSort(arr, MAX);
long t_end = getSystemTime();
printf("冒泡排序%d个元素所需的时间是%d\n", MAX, t_end - t_start);
//PrintArray(arr, MAX);
return 0;
}
结果:
冒泡排序10000个元素所需的时间是179
选择排序
示例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/timeb.h>
#include<time.h>
#define MAX 10000
long getSystemTime()
{
struct timeb tb;
ftime(&tb);//取系统的时间,精确到毫秒,其返回一个结构体
return tb.time * 1000 + tb.millitm;//将秒转换成毫秒,转换单位为1000,millitm表示毫秒
}
//交换函数
void Swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//打印函数
void PrintArray(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//改进的冒泡排序
int flag = 0;//表示没有排序好
void bubblesort(int arr[], int length)
{
for (int i = 0; i < length - 1; i++)
{
flag = 1;//认为已经排序好
for (int j = 0; j < length - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
flag = 0;
/*swap(&arr[j], &arr[j + 1]);*/
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//选择排序,只是减少交换次数
void