本文目錄一覽:
C語言直接選擇排序運行失敗
你的選擇排序的函數傳參,傳錯了,select_sort(a[8],8);應該是select_sort(a,8);
a[8]在C語言中是數組a的第9個元素,而a數組只有8個元素,所以你傳了一個越界的數組元素,因此出運行錯誤
a在C語言中是數組a的第1個元素的指針,所以可以在函數中訪問到整個a數組
還有函數的定義那一句void select_sort();應該改成 void select_sort(int a[],int n);
還有需要把if(min!=i)語句移到for-j循環外面,for-i循環裡面
還有把printf(“%d”,a[i]); 改成printf(“%d “,a[i]);每輸出一個元素加一個空格
完整的C語言程序如下
#include stdio.h
void select_sort(int a[],int n);
int main(){
int i; int a[8];
printf(“請輸入8個整數,將為您從小到大排序。\n”);
for(i=0;i8;i++) {
scanf(“%d”,a[i]);
}
select_sort(a,8);
for(i=0;i8;i++) {
printf(“%d “,a[i]);
}
return 0;
}
void select_sort(int a[],int n){
int i,j,t,min;
for(i=0;in-1;i++) { //n-1次排序(移動)
min=i;
for(j=i+1;jn;j++) { //n-i次比較
if(a[min]a[j]) min=j;
}
if(min!=i){ //最小值不在i處的情況
t=a[min];
a[min]=a[i];
a[i]=t;
}
}
}
運行結果
請輸入8個整數,將為您從小到大排序。
8 71 16 35 43 33 26 18
8 16 18 26 33 35 43 71
C語言編寫程序,將一個一維數組的值按逆序重新存放。
#includestdio.h
int main()
{
int a[5]={8,6,5,4,1},i,n=5,temp;
for(i=0;in/2;i++)
{
temp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=temp;
}
for(i=0;in;i++)
{
printf(“%d\t”,a[i]);
}
system(“pause”);
return 0;
}
擴展資料:
選擇排序
主要思想就是,基本上默認數組中第一個元素為最大(最小)值,之後將這個元素和後面的每個元素都進行比較,以由大到小排序為例,當第一個值遇到比其大的,就進行交換。這樣第一輪過後,第一位就是最大的。
接著進行第二輪,由第二個數開始逐個比較,遇到比第二個數大的進行交換,這樣第二輪之後第二個數就是第二大的了,以此類推,不斷進行選擇,最後完成排序。
void selectSort(int numbers[], int length) {
for (int i = 0; i length; i++) {
for (int j = i + 1; j length; j++) {
if (numbers[i] numbers[j]) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}
int main(int argc, const char * argv[]) {
int myArray[] = {42, 7, 1, -3, 88};
int length = sizeof(myArray) / sizeof(myArray[0]);
selectSort(myArray, length);
for (int i = 0; i length; i++) {
printf(“%i “, myArray[i]);
}
return 0;
}
當第一個數來比較的時候,i = 0,那麼j應該等於i + 1,因為第一個數要和第二個數開始比,並且比較length – 1次;當i = 1時,j = 2,並且比較length – 2次,以此類推;上面寫的是由大到小排序。
c語言怎樣通過函數調用實現選擇排序法
c語言通過函數調用實現選擇排序法:
1、寫一個簡單選擇排序法的函數名,包含參數。int SelectSort(int * ListData,int ListLength);
2、寫兩個循環,在循環中應用簡單選擇插入排序:
int SelectSort(int * ListData,int ListLength)
{
int i , j ;
int length = ListLength;
for(i=0;i=length-2;i++)
{
int k = i;
for(j=i+1;j=length-1;j++)
{
if(ListData[k]ListData[j])
{
k=j;
}
}
if(k!=i)
{
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
}
}
return 0;
}
3、對編好的程序進行測試,得出測試結果:
int main()
{
int TestData[5] = {34,15,6,89,67};
int i = 0;
printf(“排序之前的結果\n”);
for(i = 0;i5;i++)
printf(“|%d|”,TestData[i]);
int retData = SelectSort(TestData,5);
printf(“排序之後的結果:\n”);
for(i = 0;i5;i++)
printf(“|%d|”,TestData[i]);
return 0;
}
4、簡單選擇排序中,需要移動的記錄次數比較少,主要的時間消耗在對於數據的比較次數。基本上,在比較的時候,消耗的時間複雜度為:n*n。
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; // 假設當前下標為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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/206181.html