程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 三種排序方法(c語言),三種排序c語言

三種排序方法(c語言),三種排序c語言

編輯:關於C語言

三種排序方法(c語言),三種排序c語言


 1 #include "stdio.h"
 2 void main()
 3 {void read_data(int a[],int n);
 4  void write_data(int a[],int n);
 5  void comp(int a[],int n);
 6  void insert(int a[],int n);   
 7  void bubble(int a[],int n);
 8  int i,n=0,a[200];
 9  printf("請輸入元素個數:");
10  scanf("%d",&n);     
11  printf("請選擇排序方法(輸入1選擇法,輸入2為插入法,輸入3位為冒泡法):");
12  scanf("%d",&i);
13  read_data(a,n);
14  if(i==1)
15    comp(a,n);
16  if(i==2)
17    insert(a,n);
18  if(i==3)
19    bubble(a,n);  
20  write_data(a,n); 
21 }
22 
23 void read_data(int a[],int n)
24 {int i=0;
25 
26  printf("請輸入元素:");
27  for(;i<n;i++)
28      scanf("%d",&a[i]);
29 }
30 
31 void comp(int a[],int n)
32 { int i,j,t;
33  for(i=0;i<(n-1);i++)
34  for(j=i+1;j<n;j++)
35     if(a[i]>a[j])
36       {t=a[i];
37        a[i]=a[j];
38        a[j]=t;   
39       }
40 }
41 
42 void insert(int a[],int n)
43 {int i=1,j=0,k,t;
44  for(;i<n;i++)
45   {for(j=0;j<i;j++)
46       if(a[i]<a[j])
47         {
48          t=a[i];
49          for(k=i;k>j;k--)
50             a[k]=a[k-1];
51          a[j]=t;
52         }
53   }
54 }
55 
56 void bubble(int a[],int n)
57 {int i,j,t;
58  for(i=0;i<n;i++)
59     for(j=0;j<(n-1);j++)
60        if(a[j]>a[j+1])
61          {t=a[j+1];
62          a[j+1]=a[j];
63           a[j]=t;   
64          }
65 }
66 
67 void write_data(int a[],int n)
68 {int i=0;
69  for(;i<n;i++)   
70     printf("%d\n",a[i]);
71 }


對於選擇法排序,就是固定一個元素,然後與其他元素依次比較,把大的(或小的)放後面,一次循環下來,最小(大)的1個元素就到了第一位了;然後固定下一個元素,循環下來第二小(大)的元素就到第二位了;繼續下去就排好了。
對於插入法排序,就是逐個把要插入的元素與已有的序列依次比較,按升序(或降序)把元素插進去,然後將原有序列的插入元素之後的元素依次後移一位,有多少要插入的元素就循環幾次。
對於冒泡法排序,就是依次比較相鄰的兩個元素,進行排序,一次循環下來,最大的(或最小的)就到了最後;然後再次重新循環,把所有上次循環的賦值都初始化,最後就把第二大的數排在了倒數第二位了,依次下去。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved