⑴ C語言:編寫一個程序用冒泡排序實現升序排列
1、首先打開一個空白的C語言文件,首先先定義一組待排序的數列以及各個變數,接著就是用來處理排序的邏輯:
⑵ 用C語言編程:用選擇法對10個整數排序,10個整數用scanf函數輸入
1、打開visual C++ 6.0,准備一個空白的c語言文件,引入頭文件,在main函數中定義變數和數組:
⑶ c語言的兩種排序
下面是C語言裡面常用的三種排序方法,但願對樓主有幫助,
一、冒泡法(起泡法)
演算法要求:用起泡法對10個整數按升序排序。
演算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往後,經過一趟比較後,將最值沉底(換到最後一個元素位置),最大值沉底為升序,最小值沉底為降序。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*輸入源數據*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) /*外循環控制排序趟數,n個數排n-1趟*/
for(i=0;i<9-j;i++) /*內循環每趟比較的次數,第j趟比較n-j次*/
if(a[i]>a[i+1]) /*相鄰元素比較,逆序則交換*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*輸出排序結果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定一個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行升序或降序排序。
演算法分析:定義n-1次循環,每個數字比較n-j次,比較前一個數和後一個數的大小。然後交換順序。
二、選擇法
演算法要求:用選擇法對10個整數按降序排序。
演算法分析:每趟選出一個最值和無序序列的第一個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後一個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循環控制趟數,n個數選n-1趟*/
{
k=i; /*假設當前趟的第一個數為最值,記在k中 */
for(j=i+1;j<n;j++) /*從下一個數到最後一個數之間找最值*/
if(a[k]<a[j]) /*若其後有比最值更大的*/
k=j; /*則將其下標記在k中*/
if(k!=i) /*若k不為最初的i值,說明在其後找到比其更大的數*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*則交換最值和當前序列的第一個數*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟是選出一個最值確定其在結果序列中的位置,確定元素的位置是從前往後,而每趟最多進行一次交換,其餘元素的相對位置不變。可進行降序排序或升序排序。
演算法分析:定義外部n-1次循環,假設第一個為最值,放在參數中,在從下一個數以後找最值若後面有比前面假設的最值更大的就放在k中,然後在對k進行分析。若k部位最初的i值。也就是假設的i不是最值,那麼就交換最值和當前序列的第一個數
三、插入法
演算法要求:用插入排序法對10個整數進行降序排序。
演算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數,其餘n-1個數組成無序序列,則n個數需進n-1次插入。尋找在有序序列中插入位置可以從有序序列的最後一個數往前找,在未找到插入點之前可以同時向後移動元素,為插入元素准備空間。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循環控制趟數,n個數從第2個數開始到最後共進行n-1次插入*/
{
t=a[i]; /*將待插入數暫存於變數t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標0 ~ i-1)中尋找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,則當前元素後移一個位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟從無序序列中取出第一個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用循環查找插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移一個位置,最後完成插入。該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行升序或降序排序。
二、下面是三種排序的概念及其優缺點
冒泡排序
已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],依此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組數據中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以升序排列了。
優點:穩定,比較次數已知;
缺點:慢,每次只能移動相鄰兩個數據,移動數據的次數多。
選擇排序
已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[1]與a[3]的值,若a[1]大於a[3]則交換兩者的值,否則不變。再比較a[1]與a[4],依此類推,最後比較a[1]與a[n]的值。這樣處理一輪後,a[1]的值一定是這組數據中最小的。再將a[2]與a[3]~a[n]以相同方法比較一輪,則a[2]的值一定是a[2]~a[n]中最小的。再將a[3]與a[4]~a[n]以相同方法比較一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以升序排列了。
優點:穩定,比較次數與冒泡排序一樣,數據移動次數比冒泡排序少;
缺點:相對之下還是慢。
插入排序
已知一組升序排列數據a[1]、a[2]、……a[n],一組無序數據b[1]、b[2]、……b[m],需將二者合並成一個升序數列。首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a數組中某一數據a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若無數組a,可將b[1]當作n=1的數組a)
優點:穩定,快;
缺點:比較次數不一定,比較次數越少,插入點後的數據移動越多,特別是當數據總量龐大的時候,但用鏈表可以解決這個問題。
⑷ 用C語言編寫一個快速排序演算法 輸入10個數
代碼如下:
#include <stdio.h>
#define N 10
void quickSort(int *arr,int l,int r)
{//此處編寫代碼實現快速排序
int i,j,x,temp;
if(l<r)
{
i=l;
j=r;
x=arr[(l+r)/2]; //以中間元素為軸
while(1)
{
while(i<=r&&arr[i]<x)i++;
while(j>=0&&arr[j]>x)j--;
if(i>=j) //相遇則跳出
break;
else
{
temp=arr[i];arr[i]=arr[j];arr[j]=temp; //交換
}
}
qsort(arr,l,i-1); //對左半部分進行快排
qsort(arr,j+1,r); //對右半部分進行快排
}
}
void printArray(int *a)
{//此處編寫代碼列印數組
int i=0;
for(;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
int main()
{
int a[N];
int i;
for(i=0;i<N;i++)
scanf("%d",a+i);
printf("排序前的數據為:\n");
printArray(a);
//調用快速排序函數,對數組中從0到N的元素進行快速排序
quickSort(a,0,N-1);
printf("從小到大排序後的序列為:\n");
printArray(a);
return 0;
}
⑸ 用C語言編程實現快速排序演算法
1冒泡排序 選擇排序 合並排序 插入排序 (他們是原地排序)2堆排序3快速排序4線性時間排序,分為:計數排序 基數排序 桶排序排序是可以相互滲透的,比如在選擇排序中用2分的思想各種排序的思想、演算法、運行時間及其期望空的話,可以問問我~
⑹ 使用C語言編程實現排序演算法
#include<stdio.h>
main()
{
struct
{
char mz[5];
int sd;
char sbing[5];
int xs;
}a[100],k;
int i,b,j;
printf("請輸進球員數量\n");
scanf("%d",&b);
for(i=0;i<b;i++)
{printf("請輸入第%d個球員的信息\n",i+1);
printf("名字:"); scanf("%s",a[i].mz);
printf("速度(數字):"); scanf("%d",&a[i].sd);
printf("傷病情況:"); scanf("%s",a[i].sbing);
printf("薪水(數字:"); scanf("%d",&a[i].xs);}
for(j=0;j<b;j++)
for(i=j+1;i<b;i++)
if(a[j].sd<a[i].sd)
{ k=a[i];
a[i]=a[j];
a[j]=k;}
if(a[j].sd==a[i].sd)
if (a[j].xs>a[i].xs)
{ k=a[i];
a[i]=a[j];
a[j]=k;}
for(j=0;j<b;j++)
printf("名字:%s 速度: %d 傷病: %s 薪水: %d\n",a[j].mz,a[j].sd,a[j].sbing,a[j].xs);
}
如有不滿請回復
⑺ c語言各種排序演算法
1:桶排序;
2:堆排序;
3:冒泡排序;
4:快速排序
5:選擇排序;
6:插入排序;
7:希爾排序;
8:歸並排序;
9:基數排序;
10:計數排序;
⑻ c語言做各種排序演算法比較程序怎麼做
已經有時間讀啦,自己測就用大量數據排序計時(只即排序時間,別記讀取和輸出時間)啦