排序算法(c语言版)
1、插入排序
#include<stdio.h>
//插入排序,升序
void insertion_sort(int arr[], int len){
int i,j,key;
for (i=1;i<len;i++){
key = arr[i];//arr[i]为待插入的元素,保存在key中
j=i-1;
while((j>=0) && (arr[j]>key)) {//满足条件的话,将前一元素向后移位
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;//将key插入到其中
}
}
//降序排列
void insert_sort(int arr[],int len){
int i,j,key;
for(i=1;i<len;i++){
key=arr[i];
j=i-1;
while((j>=0)&&arr[j]<key){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=key;
}
}
int main(){
int arr[10]={1,22,11,843,29,27,183,18,28,9};
int *p=&arr;
int len=sizeof(arr)/sizeof(int);
insertion_sort(p,len);
for(int i=0;i<10;i++){
printf("%d ",p[i]);
}
printf("\n");
insert_sort(p,len);
for(int i=0;i<10;i++){
printf("%d ",p[i]);
}
}
2、选择排序
#include <stdio.h>
void swap(int *a,int *b) //交换位置
{
int temp = *a;
*a = *b;
*b = temp;
}
//选择排序
void select(int arr[], int len){
int i, j;
for (i = 0; i < len-1; i++){
int min = i;//最小元素下标
for (j = i + 1; j < len; j++){
if (arr[j] < arr[min]){
min = j; //将最小元素下标给min
}
}
swap(&arr[min], &arr[i]); //交换两者位置
}
}
int main(){
int arr[10]={1,22,11,843,29,27,183,18,28,8};
int *p=&arr;
int len=sizeof(arr)/sizeof(int);
select(p,len);
for(int i=0;i<10;i++){
printf("%d ",p[i]);
}
}
3、快速排序
#include<stdio.h>
//快速排序
void quick_sort(int a[],int l,int r){//l为左边界,r为右边界
if(l<r){
int i,j,x;
i=l;
j=r;
x=a[i];//x为基准
while(i<j){
while(i<j&&a[j]>x){//找小于x的元素
j--;
}
if(i<j) a[i++]=a[j];
while(i<j&&a[i]<x){//找大于x的元素
i++;
}
if(i<j) a[j--]=a[i];
}
a[i]=x;
quick_sort(a,l,i-1);
quick_sort(a,i+1,r);
}
}
int main(){
int ar[10]={1,22,11,843,29,27,183,18,28,8};
int *p=&ar;
int len=sizeof(ar)/sizeof(int);
quick_sort(p,0,len);
for(int i=0;i<10;i++){
printf("%d ",p[i]);
}
}
4、插入排序
#include<stdio.h>
void shell_sort(int a[],int len){
int i,j,gap;//gap为步长
for(gap=len/3;gap>0;gap/=3){//gap为数组长度的1/3
for(i=0;i<gap;i++){
for(j=i+gap;j<len;j+=gap){
if(a[j]<a[j-gap]){
int tmp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > tmp)
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = tmp;
}
}
}
}
}
int main(){
int arr[10]={1,22,11,843,29,27,183,18,28,8};
int *p=&arr;
int len=sizeof(arr)/sizeof(int);
shell_sort(p,len);
for(int i=0;i<10;i++){
printf("%d ",p[i]);
}
}
标签:arr,int,void,len,gap,算法,排序,语言版
From: https://www.cnblogs.com/cgl-dong/p/18128655