快速排序算法和冒泡排序算法是差不多的,都是要两层循环,外循环是要比较的个数,其实就是元素的个数,内循环就是外层那个标记和其他的比较大小,
冒泡排序是相邻的两个,两两比较,最后交换出一个最大或者最小值,
快速排序是在冒泡排序的基础上,找出那个最小的或者最大的,但是不是直接交换,而是记下它的下标,最后把开头和这个下标的元素交换。
快速排序算法是不稳定的排序算法,比冒泡排序算法稍微快一点。
以下代码里有快速排序和冒泡排序的代码,可以比较以下差异,
/***************************************************
##filename : selectsort.c
##author : GYZ
##e-mail : [email protected]
##create time : 2018-10-31 09:54:39
##last modified : 2018-11-05 11:07:30
##description : NA
***************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void selectSort(int a[],int n)
{
/*selection sort*/
int i = 0,j = 0;
int min_index = 0;
int temp = 0;
for(i = 0; i < n; ++i)
{
for(j = i+1; j < n; ++j)
{
if(a[i] > a[j])
{
min_index = j;
}
}
temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
/*bubble sort*/
/*
int temp = 0;
int i = 0,j = 0;
for(i = 0; i < n; ++i)
{
for(j = i+1; j < n; ++j)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}*/
}
void printArr(int a[],int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d,",a[i]);
}
printf("\n");
}
int main(int argc,char *argv[])
{
int length = 0;
int begin,end;
int a[] = {26,20,10,14,15,21,22,23,24,25,28,29,30,3,5,6,1,9,4,8,2,7,11,13,12,27,18,19,16,17};
length = sizeof(a) / sizeof(a[0]);
begin = clock();
selectSort(a,length);
end = clock();
printf("%d\n",end-begin);
printArr(a,length);
return 0;
}