c語言一維數組排序
㈠ 一維數組的排序,用c語言寫。QAQ求幫忙
#include "stdio.h"
#include "conio.h"
void sort(int score[],int n)
{
int i,j,d;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++)
if (score[i]<score[j]){
d=score[i];
score[i]=score[j];
score[j]=d;
}
}
}
void main()
{
int score[20];
int i,n;
printf("Input n=?\n");
scanf("%d",&n);
printf("Pleas input %d scores\n",n);
for(i=0;i<n;i++)
scanf("%d",&score[i]);
sort(score,n);
printf("The sort data is:\n");
for(i=0;i<n;i++)
printf("%3d",score[i]);
getch();
}
㈡ C語言中通過函數調用對一維數組進行排序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXlen 100
void select_sort(int *x, int n) { //選擇排序
int i, j, min;
int t;
for (i = 0; i < n - 1; i++) { // 要選擇的次數:0~n-2共n-1次
min = i; // 假設當前下標為的數最小,比較後再調整
for (j = i + 1; j < n; j++) { //循環找出最小的數的下標是哪個
if (*(x + j) < *(x + min)) {
min = j; // 如果後面的數比前面的小,則記下它的下標
}
}
if (min != i) { // 如果min在循環中改變了,就需要交換數據
t = *(x + i);
*(x + i) = *(x + min);
*(x + min) = t;
}
}
}
int main() {
int i;
int iArr[MAXlen];
srand((unsigned int)time(NULL));
printf("\n排序前:\n");
for(i = 0 ; i < MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n");
select_sort(iArr,MAXlen);
printf("\n排序後:\n");
for(i = 0 ; i < MAXlen ; i++) {
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n\n");
return 0;
}
㈢ c語言中,用一維數組排序十個整數,怎麼做
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
㈣ 用C語言對一維數組排序,並輸出原來的位置
可以先用冒泡排序對數組進行排序,然後對排序的數組進行遍歷,找出其在排序之前數組中的位置,參考代碼如下:
#include<stdio.h>
#include<string.h>
#defineN5
intmain()
{
inta[N],b[N],c[N],i,j,temp;
for(i=0;i<N;i++){//輸入數組,並用b保存數組a的值
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i<N-1;i++)//對a從大到小冒泡排序
for(j=0;j<N-i-1;j++)
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<N;i++)//輸出排序後的a
printf("%d",a[i]);
printf(" ");
for(i=0;i<N;i++)//遍歷找出以前的位置
for(j=0;j<N;j++){
if(a[i]==b[j])
c[i]=j;
}
for(i=0;i<N;i++)//輸出位置數組
printf("%d",c[i]+1);
printf(" ");
return0;
}
/*
運行結果:
38476
87643
24531
*/
㈤ 用C語言對一維數組排序,並輸出已排好元素的原來位置
/*我舉個簡單例子,一個一維數組inta[5]={3,8,4,7,6}
按降序排列以後是intb[5]={8,7,6,4,3}
最大的元素8在原來的數組中是第二位,7是第四位,等等
得到一個表示原來位置的數組intc[5]={2,4,5,3,1}*/
#include<stdio.h>
voidmain()
{
inti,j,k=0;
inta[5]={3,8,4,7,6};
intb[5]={8,7,6,4,3};
intc[5]={0};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(b[i]==a[j])
{
c[k++]=j+1;//因為說的是第幾位而不是下標所以加1
break;
}
}
}
for(i=0;i<5;i++)
{
printf("%d",c[i]);
}
}
24531Pressanykeytocontinue
㈥ C語言用冒泡法對一維數組中10個數按降序進行排列
#include<stdio.h>
intmain()
{
intn[]={1,2,3,4,5,6,7,8,9,10};
inti,j,num;
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(n[i]<n[j])
{
num=n[i];
n[i]=n[j];
n[j]=num;
}
}
}
printf("1,2,3,4,5,6,7,8,9,10冒泡降序排列後為:");
for(i=0;i<10;i++)
printf("%d",n[i]);
return0;
}
㈦ C語言數組排序
#include<stdio.h>
intsd[81];
intshow(intk)
{inti,j,n,m=k%9;
for(j=k-m;j<k-m+9;j++)
printf("%3d",sd[j]);
printf(" ");
for(j=m;j<81;j+=9)
printf("%*c%02d ",3*m,'',sd[j]);
j=k-k%27+3*(k%9/3);
for(i=0;i<3;i++)
{for(n=j;n<j+3;n++)
printf("%3d",sd[n]);
j+=9;
printf(" ");
}
return0;
}
intmain()
{intk;
for(k=0;k<81;k++)
sd[k]=k;
scanf("%d",&k);
show(k+1);
return0;
}
㈧ c語言一維數組冒泡排序
如果遇到相等的值不進行交換,那這種排序方式是穩定的排序方式。 原理:比較兩個相鄰的元素,將值大的元素交換到右邊 思路:依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在後面。 (1)第一次比較:首先比較第一和第二個數,將小數放在前面,將大數放在後面。 (2)比較第2和第3個數,將小數 放在前面,大數放在後面。 ...... (3)如此繼續,知道比較到最後的兩個數,將小數放在前面,大數放在後面,重復步驟,直至全部排序完成 (4)在上面一趟比較完成後,最後一個數一定是數組中最大的一個數,所以在比較第二趟的時候,最後一個數是不參加比較的。 (5)在第二趟比較完成後,倒數第二個數也一定是數組中倒數第二大數,所以在第三趟的比較中,最後兩個數是不參與比較的。 (6)依次類推,每一趟比較次數減少依次比上一趟減少一次。 演算法分析: (1)由此可見:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數 (2)冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了演算法的量。 (3)時間復雜度 1.如果我們的數據正序,只需要走一趟即可完成排序。所需的比較次數C和記錄移動次數M均達到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的時間復雜度為O(n)。 2.如果很不幸我們的數據是反序的,則需要進行n-1趟排序。每趟排序要進行n-i次比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值: 綜上所述:冒泡排序總的平均時間復雜度為:O(n2) ,時間復雜度和數據狀況無關。 void BubbleSort(int a[], int len) { int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } }
㈨ 關於C語言一維數組排序問題
冒泡排序法:
#include<stdio.h>
void main()
{ int a[5]={5,4,3,2,9},i,k,temp;
for(k=0;k<5;k++)
{for(i=k+1;i<5;i++)
if(a[k]<a[i])
{temp=a[k];
a[k]=a[i];
a[i]=temp;
}
printf(" %d",a[k]);
}
getch();
}
以下是各種基本排序的演算法,有時間可以看看
選擇排序:
#include "stdio.h"
#define N 5
main()
{
int i,j,k,t;
int a[N];
printf("請輸入五位數:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(a[k]>a[j]) k=j;
if(i!=k)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
插入排序法:
#include "stdio.h"
#define N 5
main()
{
int i,j,k;
int a[N];
printf("請輸入五位數:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
k=a[i];
j=i-1;
while(j>=0&&k<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
shell排序法:
#include "stdio.h"
#define N 10
main()
{
int i,j,k,m,flag;
int a[N]={10,33,23,45,12,67,44,22,33,18};
m=N;
while(m>1)
{
m=(m+1)/2;
do
{
flag=0;
for(i=0;i<N-m;i++)
{
j=i+m;
if(a[i]>a[j])
{
k=a[i];a[i]=a[j];a[j]=k;flag=1;
}
}
}while(flag);
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
如果對你有所幫助,請記得點贊最佳答案,謝謝!