一維數組的應用--排序

1. 簡單比較排序

使用for循環描述i,j的變化規律,並推廣到n個元素。

i  外循環變量控制比較次數,i=0,i<n-1

j  內循環變量控制一次內的比較、交換,j=i+1,j<n

例1:簡單比較循環

 

#include<stdio.h>

main(){

int a[10];

int i,j;

int temp=0;

printf("please input ten number random:/n");

for(i=0;i<10;i++)//輸入10個數

scanf("%d",&a[i]);

printf("the number you have input is:/n");

for(i=0;i<10;i++)//輸出輸入的10個數

printf("%d/t",a[i]);

for(i=0;i<9;i++)//簡單比較排序

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

if(a[i]>a[j]){//換序

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

printf("the changed secquence is:/n");

for(i=0;i<10;i++)//輸出輸入的10個數

printf("%d/t",a[i]);

}

2.  冒泡循環

使用for循環描述i,j的變化規律,並推廣到n個元素。

i  外循環變量控制比較次數,i=0,i<n-1

j  內循環變量控制兩兩比較元素的下標,j=0,j<n-i-1

例2:冒泡排序

#include<stdio.h>
main(){
int a[10];
int i,j;
int temp=0;
printf("please input ten number random:/n");
for(i=0;i<10;i++)//輸入10個數
scanf("%d",&a[i]);
printf("the number you have input is:/n");
for(i=0;i<10;i++)//輸出輸入的10個數
printf("%d/t",a[i]);
for(i=0;i<10;i++)//冒泡排序
for(j=0;j<9-i;j++){
if(a[j]>a[j+1]){//換序
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("the changed secquence is:/n");
for(i=0;i<10;i++)//輸出輸入的10個數
printf("%d/t",a[i]);
}
3.  選擇排序
  算法描述:從a[0]元素開始找出最小值元素的下表min,將a[0]元素與a[min]元素進行交換;第二趟,從a[1]元素開始
最小值元素的下表min,將a[1]元素與
a[min]元素進行交換。


使用for循環描述i,j的變化規律,並推廣到n個元素。

i  外循環變量控制比較次數,i=0,i<n-1

j  內循環變量控制找元素值最小的下標,j=i+1,j<n

例3:選擇排序

#include<stdio.h>

main(){

int a[10];

int i,j,min;

int temp=0;

printf("please input ten number random:/n");

for(i=0;i<10;i++)//輸入10個數

scanf("%d",&a[i]);

printf("the number you have input is:/n");

for(i=0;i<10;i++)//輸出輸入的10個數

printf("%d/t",a[i]);

for(i=0;i<10;i++)//冒泡排序

{

min=i;

for(j=i;j<10;j++){

if(a[j]<a[min])//換序 

min=j;

}

if(min!=i){

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

}

printf("the changed secquence is:/n");

for(i=0;i<10;i++)//輸出輸入的10個數

printf("%d/t",a[i]);

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章