數組排序c語言
Ⅰ c語言對一維數組排序
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定義變數及數組為基本整型
printf("請輸入10個數:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //從鍵盤中輸入10個數
for(i=1;i<10;i++) //變數i代表比較的趟數
for(j=1;j<10-i;j++) //變最j代表每趟兩兩比較的次數
if(a[j]>a[j+1])
{
t=a[j]; //利用中間變數實現兩值互換
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序後的順序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //將冒泡排序後的順序輸出
printf("\n");
return 0;
}
Ⅱ C語言數組排序方法
選擇排序的原理是,每次從待排序數字中挑選出最大(最小)數字,放在有序序列的末尾。實際操作中,只需要在這個數組中將挑出來的數字與前面的數字交換即可。例如:4
1 5
2 3找到最小的1,1和4交換1
4 5
2
3找到最小的2,2和4交換1
2
5
4
3找到最小的3,3和5交換1
2
3
4
5找到最小的4,4和4交換(不交換也可)可見,選擇排序需要一個雙重循環來完成,因此它的復雜度是O(n^2)在數據量比較大時,不建議使用這種排序方法。 其他排序方法有很多,你甚至可以自己根據不同數據規模設計不同的排序方法。比較常見的有冒泡排序,插入排序(這兩種和選擇排序一樣,都是O(n^2)),二分法插入排序(降低了一些復雜度,但是涉及到大規模數據移動,效率依然不高),快速排序(平均復雜度O(nlogn),但是不穩定,最壞情況O(n^2)),隨機化快速排序(很大程度上避免了最壞情況的出現),堆排序(O(nlogn),編程復雜度高),基數排序(理論復雜度O(n),實際要比這個慢。甚至能應付字元串排序,但是編程復雜度高,牽扯到其他數據結構),桶排序(O(n),編程簡單,效率高,但是應付的數據范圍不能太大,受到內存大小的限制)。 平時比較常用的就是快速排序,程序簡單,效率也可以接受。 這是我了解的一些東西,希望對你有幫助。
Ⅲ c語言考試。問數組,常見的數組排序演算法有那幾種選擇一個描述過程。
有插入排序:直接插入排序、折半插入排序、希爾排序;交換排序:冒泡排序、快速排序;選擇排序:簡單選擇排序、堆排序;歸並排序;基數排序。
常用冒泡排序的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面(數組由小到大排序)。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後,此時第一趟結束,在最後的數必是所有數中的最大數。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到最大數前的一對相鄰數,將小數放前,大數放後,第二趟結束,在倒數第二個數中得到一個新的最大數。如此下去,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
用二重循環實現,外循環變數設為i,內循環變數設為j。外循環重復9次,內循環依次重復9,8,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,9,對於每一個i,
j的值依次為1,2,...10-i。
代碼:
for(i=0;
i<NUM-1;
i++)
/*外循環:控制比較趟數*/
for(j=NUM-1;
j>i;
j--)
/*內循環:進行每趟比較*/
if(data[j]<data[j-1])
/*如果data[j]大於data[j-1],交換兩者的位置*/
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};
Ⅳ C語言數組排序
#defineN9
inta[N*N];
intshow(intk){inti,j,m,n;
m=k/N;n=k%N;
for(i=0;i<N;i++)printf("%02d",a[m*N+i]);printf(" ");
for(i=0;i<N;i++){
for(j=0;j<n;j++)printf("");
printf("%02d ",a[n+i*N]);
}
if(m==0)m++;elseif(m==8)m--;
if(n==0)n++;elseif(n==8)n--;
for(i=0;i<N/3;i++){
for(j=0;j<N/3;j++)printf("%02d",a[(m-1+i)*N+n-1+j]);
printf(" ");
}
return0;
}
intshow1(intk){inti,j,mm,nn;
mm=k/N;nn=k%N;
if(mm==0)mm++;elseif(mm==8)mm--;
if(nn==0)nn++;elseif(nn==8)nn--;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
if(i==mm||j==nn||(i>=mm-1&&i<=mm+1&&j>=nn-1&&j<=nn+1))
printf("%02d",a[i*N+j]);
elseprintf("");
printf(" ");
}
return0;
}
voidmain(){inti,n;
for(i=0;i<N*N;i++)a[i]=i;
scanf("%d",&n);show(n);printf(" ------------------------------ ");show1(n);
運行結果中橫線前面按題目列印,後面更直觀
Ⅳ c語言數組的排序
可以採用冒泡排序的方法。以下給題主一個對既定數組進行升序、降序排序的代碼
#include<stdio.h>
#include<time.h>
#defineelemTypeint/*元素類型*/
#defineLEN100/*數組長度上限*/
#defineASC0/*升序*/
#defineDESC1/*降序*/
/*冒泡排序*/
/*參數說明:*/
/*elemTypearr[]:排序目標數組*/
/*intlen:元素個數*/
/*intorder:排序方式;升序(由小到大):ASC;降序(由大到小):DESC*/
voidbubbleSort(elemTypearr[],intlen,intorder){
inti,j,temp;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++){
if(order==ASC){/*升序*/
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
elseif(order==DESC){/*降序*/
if(arr[j]<arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
/*列印數組*/
voidprintArr(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}
intmain(void){
elemTypearr[LEN]={3,5,1,7,2,9,6,8,10,4};
intlen;
len=10;
puts("初始數組:");
printArr(arr,len);
putchar(' ');
puts("升序排列:");
bubbleSort(arr,len,ASC);/*升序冒泡排序*/
printArr(arr,len);
putchar(' ');
puts("降序排列:");
bubbleSort(arr,len,DESC);/*降序冒泡排序*/
printArr(arr,len);
putchar(' ');
getch();/*屏幕暫留*/
return0;
}
運行結果
Ⅵ c語言數組排序中的選擇法是什麼意思啊
選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的數據元素中 選出 最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。所以這種排序的方法叫選擇法排序。
C語言參考實例:
#include<stdio.h>
voidmain()
{
inta[]={1,3,4,2,0};
inti,j,n=5;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)//每一遍都與當前a[i]比較
if(a[i]<a[j])//大的前移
{
intt=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
}
Ⅶ c語言將數組從小到大排序
有些簡單的東西不用指針,用了有時反而會錯
這是我以前寫的
#include<stdio.h>
intmain()
{
inti,j,x[100],y=0,a;
printf("請輸入數字數量: ");
scanf("%d",&a);
printf("請輸入各個數字: ");
for(i=0;i<a;i++)
{
scanf("%d",&x[i]);
}
printf(" ");
//輸入
for(j=1;j<=(a-1);j++)
{
for(i=0;i<(a-j);i++)
{
if(x[i]<x[(i+1)])
{
y=x[(i+1)];
x[(i+1)]=x[i];
x[i]=y;
}
}
}
//冒泡排序
for(i=(a-1);i>=0;i--)
{
printf("%d<",x[i]);
}
printf(" ");
for(i=0;i<a;i++)
{
printf("%d>",x[i]);
}
printf("");
//輸出
return0;
}
Ⅷ c語言數組排序
你輸入的時候就不可能通過,怎麼可能存在a[3]啊,只能輸入3個數字,否則越界了。簡單的排序有冒泡,選擇,基數,歸並,希爾,插入,還有堆排序。
Ⅸ C語言,數組排序
min=i; //假設i是最小的
for(j=i+1;j<=8;j++) //遍歷i之後的元素
if(a[min]>a[j]) //還有比a[i]小的元素?
min=j; //有,記住這個元素的編號
temp=a[i]; //下面3行,交換最小的元素和第i個元素,使a[i]是最小的
a[i]=a[min]; //這里你可以判斷一下,如果min==i就不用交換。
a[min]=temp;
Ⅹ C語言編寫函數,數組排序
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void Selectsort(int *arr, int sz)
{for (int end=sz-1; end>=0; end--)
{
int max = end;
int i;
for ( i = 0; i <= end; i++)//選出最大下標
{
if (arr[i] > arr[max])
{
max = i;
}
}
Swap(&arr[end], &arr[max]);
}
}
int main()
{
int arr[5] = { 1, 3, 2, 5, 4 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i <= sz - 1; i++)
{
scanf("%d", &arr[i]);
}
Selectsort(arr, sz);
for (int i = 0; i <= sz - 1; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
(10)數組排序c語言擴展閱讀:
printf函數使用注意事項
1、域寬
%d:按整型數據的實際長度輸出。
如果想輸出指定寬度可以指定域寬,%md-->m域寬,列印出來以後,在控制台上,顯示m位;
如果要列印的數的位數如果超過我們設定m則原樣輸出;
如果要列印的數的位數如果小於設定的位數,則補空白,具體如下:
如果m為正數,則左對齊(左側補空白);
如果m為負數,則右對齊(右側補空白)。
2、轉義字元
如果想輸出字元"%",則應該在「格式控制」字元串中用連續兩個%表示。
如:printf("%f%%",1.0/3);輸出結果:0.333333%。