c語言選擇排序程序
❶ c語言 選擇排序
voidSelectSort(SSTable&L)
{//對順序表L做簡單選擇排序
inti,j,k,n;
SSTable元素類型t; //不能只交換key,要整個結構進行交換
for(i=0;i<L.length-1;i++) //循環范圍變了
{
k=i;
for(j=i+1;j<=L.length;j++)
{
if(L.R[j].key<L.R[k].key)
k=j;//k指向此趟排序中最小的記錄
if(k!=i)
{
t=L.R[i];
L.R[i]=L.R[k];
L.R[k]=t;
}
for(n=0;n<L.length;n++)
printf("%d",L.R[n].key);
printf(" ");
}
}
}
❷ 選擇排序c語言代碼
選擇排序代碼如下:
#include <stdio.h>
int main()
{
int a[100], n, i, j, position, swap;
printf("Enter number of elementsn");
scanf("%d", &n);
printf("Enter %d Numbersn", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i = 0; i < n - 1; i++)
{
position=i;
for(j = i + 1; j < n; j++)
{
if(a[position] > a[j])
position=j;
}
if(position != i)
{
swap=a[i];
a[i]=a[position];
a[position=swap;
}
}
printf("Sorted Array:n");
for(i = 0; i < n; i++)
printf("%dn", a[i]);
return 0;
}
❸ C語言中的選擇排序法是什麼
選擇排序(Selection sort)是一種簡單直觀的排序演算法。工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
以下是一個實現選擇排序的例子:
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
//將list中的n個數據,通過選擇排序演算法排序。
voidselete_sort(intlist[],intn)
{
inti,j,min,temp;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++)//找出最小元素的下標。
if(list[j]<list[min])
min=j;
SWAP(list[i],list[min],temp);//交換最小元素到當前起始位置。
}
}
❹ 用C語言實現選擇排序
程序如下,但是這個題目有些問題,隨機產生10000個100之內的整數,根據概率來看至少有100個左右的100,所以輸出前10個最大值基本上100%的可能都是100,你要是不放心,可以將我下面的程序裡面的k改成10000看一下實際效果:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#define N 10000
void SelectSort ( int array[], int n )
{
int nMinIndex;
int nIndex_1, nIndex_2;
for (nIndex_1 = 0;nIndex_1 < n - 1 ;nIndex_1++)
{
nMinIndex = nIndex_1;
for (nIndex_2 = nIndex_1 + 1 ; nIndex_2 < n;nIndex_2++)
{
if ( array[nMinIndex] > array[nIndex_2] )
{
nMinIndex = nIndex_2;
}
}
if ( nMinIndex != nIndex_1 )
{
int temp = array[nIndex_1];
array[nIndex_1] = array[nMinIndex];
array[nMinIndex] = temp ;
}
}
}
void ShowArray(int array[], int k)
{
int i;
for (i = 0; i < k; i++)
{
printf("%d\t", array[i]);
if ((i+1)%10 == 0)
{
printf("\n");
}
}
printf("\n");
}
int main()
{
int array[N] = {0};
int k=10,i;
srand((unsigned) time(NULL));
for(i=0;i<N;i++)
array[i]=rand()%100+1;
SelectSort(array, N);
printf("Sorted Array:\n");
ShowArray(array, k);
system("pause");
return 0;
}
❺ C語言程序 用選擇法對十個數排序
#include <stdio.h>
int main()
{int i,j,min,temp,a[11];
printf("enter data: ");
for (i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf(" ");
printf("The orginal numbers: ");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf(" ");
for (i=1;i<=9;i++)
{min=i;
for (j=i+1;j<=10;j++)
if (a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf(" The sorted numbers: ");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf(" ");
return 0;
}
空白字元
空白字元會使scanf()函數在讀操作中略去輸入中的一個或多個空白字元,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。
非空白字元
一個非空白字元會使scanf()函數在讀入時剔除掉與這個非空白字元相同的字元。
❻ C語言:用選擇排序法對一個數組里的數進行排序,從小到大,要求選出小的進行排序
#include<stdio.h>
intmain()
{
inti=0;
inta[10]={0,5,2,3,6,9,8,7,4,1};
intj=0;
inttmp=0;
intm=sizeof(a)/sizeof(a[0]);//s數組大小
for(i=0;i<m-1;i++)//比較m-1次
{
for(j=0;j<m-i-1;j++)//最後一次比較a[m-i-1]與a[m-i-2]
{
if(a[j]>a[j+1])//如果a[j]比a[j+1]大則交換內容
{
tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
for(i=0;i<m;i++)
{
printf("%d",a[i]);//列印
}
printf(" ");
return0;
}
(6)c語言選擇排序程序擴展閱讀
C語言排序法
把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。
循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。
需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。
❼ c語言 選擇法排序
void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k來進行循環排序
for(j=i+1;j<n;j++) //將第i個元素後面的元素與第i個元素進行比較
if(array[j]<array[k]) //如果第k=i個元素後面的元素小於i號元素,交換兩個元素的標號, 這樣就將最小元素的標號放到最前面
k=j; //交換標號
temp=array[k]; //循環結束後,交換兩個標號下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
這個程序實現的是由小到大的排序。第二個循環裡面,就是i號元素後面最小的元素對應的標號放到k中,在交換當前元素與k號元素中的值,實現由大到小排序
❽ C語言:設計選擇排序排序的C語言程序。
選擇法排序
#include <stdio.h>
#define N 10
int main()
{
int array[N];
for(int i=0; i<N; i++)
scanf("%d",&array[i]);
for(i=0; i<N; i++)
for(int j=i+1; j<N; j++)
{
if(array[i]<array[j])
{
int t=array[i];
array[i]=array[j];
array[j]=t;
}
}
for(i=0;i<N;i++)
{printf("%3d",array[i]); }
printf("\n");
return 0;
}
程序2
#include <iostream>
using namespace std;
void main()
{
int i,a[10],k=1,z,j;
cout<<"請任意輸入10個數,進行排序."<<endl;
for(i=0;i<=9;i++)
{
cout<<"請輸入第"<<k++<<"個數字"<<endl;
cin>>a[i];
}
for(i=0;i<=8;i++)
for(j=i+1;j<=9;j++)
if(a[i]<a[j])
{z=a[j];a[j]=a[i];a[i]=z;}
cout<<"從大到小順序為"<<endl;
for(i=0;i<=9;i++)
cout<<a[i]<<' ';
}
❾ C語言選擇排序法
#include<stdio.h>
voidswap(int*a,int*b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
voidsort(int*a,unsignedintn,unsignedintm)
{
intmin;
intminSite;
for(inti=0;i<n;++i)
{
min=a[i];
minSite=i;
for(intj=1;j<n;++j)
{
if(a[j]<min)
{
min=a[j];
minSite=j;
}
}
swap(&a[i],&a[minSite]);
if(i<m)
{
for(inti=0;i<n;++i)
printf("%d",a[i]);
putchar('
');
}
}
}intmain()
{
inta[20];
unsignedintn,m;
printf("請輸入個數n和需要顯示的次數m:
");
scanf("%u%u",&n,&m);
printf("請輸入n個整數:
");
for(inti=0;i<n;++i)
{
scanf("%d",&a[i]);
}
printf("m次輸出如下:
");
sort(a,n,m);
return0;
}
❿ C語言編程:選擇法排序
選擇排序是一種簡單直觀的排序演算法。
工作原理:
每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
性能:
選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導致第一個5挪動到第二個5後面)。
選擇排序的時間復雜度是O(n^2)
思想:
n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
①初始狀態:無序區為R[1..n],有序區為空。
②第1趟排序
在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
……
③第i趟排序
第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
C語言版代碼:
#include<stdio.h>
#include<math.h>
#defineMAX_SIZE101
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
voidsort(int[],int);/*selectionsort*/
intmain()
{
inti,n;
intlist[MAX_SIZE];
printf(":");
scanf_s("%d",&n);
if(n<1||n>MAX_SIZE){
fprintf(stderr,"Impropervalueofn ");
exit(1);
}
for(i=0;i<n;i++){/*randomlygeneratenumbers*/
list[i]=rand()*1000;
printf("%d",list[i]);
}
sort(list,n);
printf(" Sortedarray: ");
for(i=0;i<n;i++)/*printoutsortednumbers*/
printf("%d",list[i]);
printf(" ");
return0;
}
voidsort(intlist[],intn)
{
inti,j,min,temp;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++)
if(list[j]<list[min])
min=j;
SWAP(list[i],list[min],temp);
}
}