概述
/* 1.冒泡排序 */
void bubblesort(int ar[], int len)
/* 1.1 冒泡排序改进版 */
void bubblesort1(int ar[], int len)
/* 2.选择排序 */
void selectsort(int ar[], int len)
/* 3,插入排序 */
void insertsort(int ar[], int len)
/* 4.希尔排序 */
void shellsort(int ar[], int len)
/* 5.归并排序 */
void merge(int ar[], int l, int mid, int r)
void mergesort(int ar[], int l, int r)
void Merge(int ar[], int len)
/* 6.快速排序 */
void quicksort(int ar[], int begin, int end)
// demo1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdlib.h>
/* 打印数组 */
void printar(int ar[], int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ", ar[i]);
printf("n");
}
/* 交换元素 */
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
/* 1.冒泡排序 */
void bubblesort(int ar[], int len)
{
int i, j;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (ar[j] > ar[j + 1])
swap(&ar[j], &ar[j+1]);
}
}
}
/* 1.1 冒泡排序改进版 */
void bubblesort1(int ar[], int len)
{
int i, flag;
do {
flag = 0;
for (i = 0; i < len - 1; i++)
{
if (ar[i] > ar[i+1])
{
swap(&ar[i], &ar[i+1]);
flag = 1;
}
}
len--;
} while (flag);
}
/* 2.选择排序 */
void selectsort(int ar[], int len)
{
int i, j, minidx;
for (i = 0; i < len - 1; i++)
{
minidx = i;
for (j = i + 1; j < len; j++)
{
if (ar[j] < ar[minidx])
minidx = j;
}
swap(&ar[i], &ar[minidx]);
}
}
/* 3,插入排序 */
void insertsort(int ar[], int len)
{
int i, j;
for (i = 1; i < len; i++)
{
j = i;
while (j > 0 && ar[j] < ar[j-1])
{
swap(&ar[j-1], &ar[j]);
j--;
}
}
}
/* 4.希尔排序 */
void shellsort(int ar[], int len)
{
int gap, i, j, tmp;
for (gap = len / 2; gap > 0; gap /= 2)
{
for (i = gap; i < len; i++)
{
j = i;
while (j - gap >= 0 && ar[j] < ar[j-gap] )
{
swap(&ar[j-gap], &ar[j]);
j = j - gap;
}
}
}
}
/* 5.归并排序 */
void merge(int ar[], int l, int mid, int r)
{
int len, i, pl, pr;
int *tmp = NULL;
len = r - l + 1;
tmp = (int*)malloc(len * sizeof(int)); //申请存放完整序列内存
memset(tmp, 0x0, len * sizeof(int));
pl = l;
pr = mid + 1;
i = 0;
while (pl <= mid && pr <= r)
{
if (ar[pl] < ar[pr])
tmp[i++] = ar[pl++];
else
tmp[i++] = ar[pr++];
}
while (pl <= mid)
tmp[i++] = ar[pl++];
while (pr <= r)
tmp[i++] = ar[pr++];
for (i = 0; i < len; i++)
ar[l + i] = tmp[i];
free(tmp);
}
void mergesort(int ar[], int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
mergesort(ar, l, mid);
mergesort(ar, mid + 1, r);
merge(ar, l, mid, r);
}
void Merge(int ar[], int len)
{
int l = 0;
int r = len - 1;
mergesort(ar, l, r);
}
/* 6.快速排序 */
void quicksort(int ar[], int begin, int end)
{
int l, r, tmp;
if (begin < end)
{
l = begin + 1;
r = end;
while (l < r)
{
if (ar[l] > ar[begin])
swap(&ar[l], &ar[r--]);
else
l++;
}
if (ar[l] >= ar[begin])
l--;
swap(&ar[l], &ar[begin]);
quicksort(ar, begin, l);
quicksort(ar, r, end);
}
}
int main()
{
int arr[10] = {8,2,7,6,9,3,5,4,1,0};
int len = sizeof(arr) / sizeof(int);
printar(arr, len);
//bubblesort(arr, len);
//bubblesort1(arr, len);
//selectsort(arr, len);
//insertsort(arr, len);
//shellsort(arr, len);
//Merge(arr, len);
quicksort(arr, 0, len-1);
printar(arr, len);
return 0;
}
时间复杂度如下:
最后
以上就是可耐猫咪为你收集整理的几种排序(C语言)的全部内容,希望文章能够帮你解决几种排序(C语言)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复