本文目錄一覽:
求C語言將數組元素大小排序!!
C語言將數組元素大小排序方法:
以下使用的是冒泡排序法實線數組從小到大排序。
思想:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。
10、2、3、4、5、6、9、8、7、1是輸入的待排序的數列,經過第一次排序,將最大的,10放在最後,第二次排序,將剩下的2、3、4、5、6、9、8、7、1進行冒泡,將當前最大的9放在倒數第二的位置,以此類推。
以下是具體代碼:
#include stdio.h
int main(){
int nums[10] = {10, 2, 3, 4, 5, 6, 9, 8, 7, 1};
int i, j, temp, isSorted;
//優化算法:最多進行 n-1 輪比較
for(i=0; i10-1; i++){
isSorted = 1; //假設剩下的元素已經排序好了
for(j=0; j10-1-i; j++){
if(nums[j] nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
isSorted = 0; //一旦需要交換數組元素,就說明剩下的元素沒有排序好
}
}
if(isSorted) break; //如果沒有發生交換,說明剩下的元素已經排序好了
}
for(i=0; i10; i++){
printf(“%d “, nums[i]);
}
printf(“\n”);
return 0;
}
擴展資料:
其他將數組從小到大排序的算法
以下使用的是選擇排序法實現數組從小到大排序。
思想:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置
輸入的序列為10、2、3、4、5、6、9、8、7、1進行一次排序後將最小的數放在了第一位(a[0]與它後面的所有數進行比較,若a[0]比後面的數大,進行交換),以此類推。
以下是具體代碼:
#include stdio.h
int main(void){
int a[1001];
int n,i,j,t;
scanf(“%d”,n);//n為要排序的數的個數
//輸入需要排序的數
for(i=0;in;++i)
scanf(“%d”,a+i);
//接下來進行排序
for(i=0;in-1;++i)//因為每次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行
{
for(j=i+1;jn;++j)//j從i後一個開始,a[i]與a[j]進行比較
{
if(a[i]a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置
for(j=0;jn;++j)
printf(“%-5d”,a[j]);
printf(“\n\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語言數組排列怎麼做?
對n個數排序,先輸入n,再輸入n個數。
選擇排序
#includestdio.h
int main()
{
int a[100];
int i,j,t,p,n;
while (~scanf(“%d”,n))
{
for (i=0;in;i++)
scanf(“%d”,a[i]);
for (i=0;in-1;i++)
{
p=i;
for (j=i+1;jn;j++)
if (a[p]a[j])
p=j;
if (p!=j)
{
t=a[p];a[p]=a[i];a[i]=t;
}
}
for (i=0;in;i++)
if (i!=n-1)
printf(“%d “,a[i]);
else
printf(“%d\n”,a[i]);
}
return 0;
}
冒泡排序
#includestdio.h
int main()
{
int i,j,t,n;int a[1000];
scanf(“%d”,n);
for(i=0;in;i++)
scanf(“%d”,a[i]);
for(j=0;j(n-1);j++)
for(i=0;i(n-1)-j;i++)
if(a[i]a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;in;i++)
{
if (i!=n-1)
printf(“%d “,a[i]);
else
printf(“%d\n”,a[i]);
}
return 0;
}
原創文章,作者:ONSV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/140518.html