C语言 常用排序算法
一、插入排序法
特点:稳定性排序 O(n^2)
void insert_sort(char num[], int n)
{
int i,j;
char key;
for(j=1;j<n;j++){
key=num[j];
for(i=j;i>0 && num[i -1] > key;i--){
num[i]=num[i-1];
}
num[i]=key;
}
}
二、冒泡排序法
特点:稳定性排序 O(n^2)
void bubble_sort(char num[], int n)
{
int i,j;
char key;
for(j=0;j<n;j++){
for(i=j;i<n;i++){
if(num[j] > num[i])
{
key = num[j];
num[j] = num[i];
num[i] = key;
}
}
}
}
三、选择排序法
特点:不稳定性排序 O(n^2)
void selection_sort(char num[], int n)
{
int i,j,z;
char key;
for(i=0;i<n;i++){
z = i;
key = num[i];
for(j=i+1;j<n;j++){
if(num[j] < key){
z = j;
key = num[j];
}
}
if(z != i)
{
num[z] = num[i];
num[i] = key;
}
}
}
四、快速排序法
特点:不稳定性排序 期望O(nlog n) 最坏O(n^2)
void quick_sort(char s[], int l, int r)
{
if (l < r)
{
int i = l, j = r;
char x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
#include<stdio.h>
int main(void)
{
int i;
char str[] = {6,3,9,34,12,43,5,23,4,2};
for(i=0;i<10;i++)
{
printf("%d ",str[i]);
}
printf("\n\r");
//insert_sort(str,10);
//bubble_sort(str,10);
//selection_sort(str,10);
quick_sort(str,0,10-1);
printf("%s\n\r","quick_sort");
for(i=0;i<10;i++)
{
printf("%d ",str[i]);
}
printf("\n\r");
return 0;
}