您的位置:首页 > 编程语言 > C语言/C++

排序算法:几种常见的排序算法的C语言代码

2009-09-19 21:02 274 查看
我们


程的

候排序算法是

常用到的,排序是数据

构的重要

成部分。下面是几种常



的C

言示例代


1.选择排序(Selection Sort)
1. 找出a[0]~a[N-1]之间
的最小

或者最大


a[0]

行交


这样
a[0]就确定了。
2. 找出a[1]~a[N-1]之间
的最小

或者最大

和a[1]

行交


这样
a[1]就确定了。
3. 这样处理进行
N-1回循

。(N是排序的
值的个数

*ptr是int型的参数数组



n是数据的个数。
选择排序示例代

如下:
void
selection_sort(int *ptr, int n)

{

int i, j, k;

for(i=0; i<n-1; i++) {

k = i;

for(j=i+1; j<n; j++){

if(*(ptr+k) >
*(ptr+j)) {

k = j;

}

}

swap((ptr+i), (ptr+k));

}

}

void swap(int *ptr1, int *ptr2)

{

int w;

w = *ptr1;

*ptr1 = *ptr2;

*ptr2 = w;

}
如果把if(*(ptr+k) > *(ptr+j)){
换成
if(*(ptr+k) < *(ptr+j)){


话,就是降序排序了。上面的例子是升序拍序。
2.

换排序(冒泡排序)(Bubble Sort)

*ptr是int型的参数数组



n是数据的个数。
交换排序示例代

如下:
void
bubble_sort(int *ptr, int n)

{

int i, j;

for(i=0; i<n-1; i++){

for(j=n-1; j>i; j--){

if(*(ptr+j-1) >
*(ptr+j)){

swap((ptr+j-1),
(ptr+j));

}

}

}

}

void swap(int *ptr1, int *ptr2) {

int w;

w = *ptr1;

*ptr1 = *ptr2;

*ptr2 = w;

}
3.插入排序(Insertion Sort)
插入排序的示例代码如下:
*ptr是int型的参数数组



n是数据的个数。
void
insertion_sort(int *ptr, int n) {

int i, j, k;

for(i=1; i<n; i++){

k = *(ptr+i);

for(j = i-1; j >=0
&& k<*(ptr+j); j--){

*(ptr+j+1) = *(ptr+j);

}

*(ptr+j+1) = k;

}

}
4.快速排序(Quick Sort)
快速排序的示例代码如下:
*ptr是int型的参数数组



n是数据的个数。
void
quick_sort(int *ptr, int left, int right) {

int i, j;

if(left >= right) return;

j = left;

for(i=left+1; i <= right;
i++)

if(*(ptr+i) < *(ptr+left))

swap(ptr+(++j), ptr+i);

swap(ptr+left, ptr+j);

quick_sort(ptr, left, j-1);

quick_sort(ptr, j+1, right);

}

void swap(int *ptr1, int *ptr2) {

int w;

w = *ptr1;

*ptr1 = *ptr2;

*ptr2 = w;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: