插入排序
i:0~数组长度
j:i->0
a[j]与a[j-1]之间比较
#include<stdio.h>
#define M 100
int main(){
int a[M];
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
for(j=i;j>0;j--){
if(a[j]<a[j-1]){
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
选择排序
i:0~数组长度-1
j:i+1~数组长度
a[j]与a[i]之间比较
int selectsort(int a[],int length){
int temp=0;
for(int i=0;i<length-1;i++){
for(int j=i+1;j<length;j++){
if(a[j]<a[i]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
冒泡排序
i:0~数组长度
j:0~数组长度-i+1
a[j]与a[j-1]之间比较
for(i=0;i<n;i++){
for(j=0;j<n-i+1;j++){
if(a[j+1]>a[j]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
希尔排序
i:step->数组长度
j:i-step->0,每次减step
step=length/2
int shellsort(int a[],int length){
int step,temp,j;
for(step=length/2;step>0;step/=2){
for(int i=step;i<length;i++){
temp=a[i];
for(j=i-step;j>=0&&temp<a[j];j-=step){
a[j+step]=a[j];
}
a[j+step]=temp;
}
}
}
快速排序
void quicksort(int *a, int left, int right)
{
int base = a[left]; // 基准数
int tmpleft = left; // tmpPos 用于存放基准数在数组中的位置
int tmprigth = right;
int temp;
if (left >= right) {
return;
}
while (left < right) {
/// 先从右边找起,找到比基准数小的数为止
while (left < right && a[right] >= base) {
right--;
}
/// 再从左边找,找到比基准数大的为止
while (left < right && a[left] <= base) {
left++;
}
/// 交换两个哨兵所在处的值
if (left < right) {
temp = a[left];
a[left] = a[right];
a[right] = temp;
}
}
/// 最后将基准数放到数组中央,此时基准数左边的数全部小于它,基准数右边的数全部大于它
a[tmpleft] = a[left];
a[left] = base;
quicksort(a, tmpleft, left - 1);
quicksort(a, left + 1, tmprigth);
}
int print(int a[],int length){
for(int i=0;i<length;i++){
printf("%d ",a[i]);
}
printf("\n");
}